git 继续控制 __pycache__ 上的更改,即使它处于 gitignore
git continues to control changes on __pycache__ even when it is in gitignore
这是我的 .gitignore
:
*__pycache__*
*.pyc
db.sqlite3
*.DS_Store
media/
res/
我可以在我的 Atom 上看到 __pycache__
目录被 VcsIgnored(这意味着被识别为不受 [=40= 控制的版本])
但是,无论如何,当我对文件进行更改时,我会在我的 Atom git window:
我不知道问题出在 git 还是 Atom.
已更新以解决评论中的 follow-up 个问题
.git忽略 仅 适用于未跟踪的文件。
如果路径显示为 "modified" 或 "unstaged",这意味着文件已经被跟踪 - 它们在索引中并且可能在您将它们放入 git 之前的先前提交中忽略,或者它们是在您将它们放入 gitignore.
后强制添加的
所以您试图忽略对跟踪文件的修改,这不是您可以在 git 中执行的操作。
(明确地说,您可能会找到答案,说您可以在索引上使用各种标志来忽略对暂存文件的更改。这几乎总是会导致麻烦,因为这不是这些标志的用途。)
那么如何忽略这些文件呢?你必须告诉 git 停止跟踪他们。这很容易做到,但它有潜在的麻烦副作用。
假设您没有很多 long-lived 分支,简单的方法是 git rm --cached
取消暂存更改,然后创建新的提交。例如,如果你只担心清理 master 分支,你可以
git checkout master
git rm -r --cached __pycache__ # or whatever other paths
git commit -m "remove unwanted files'
现在你应该发现,git status
默认不显示这些文件,git add
也不添加。但是,如果你做了一些改变文件的事情然后
git checout HEAD^
回到包含这些文件的提交,git 将悄悄地破坏您对这些文件所做的更改,即使它没有要从中恢复的更改副本。当你随后
git checkout master
它们将从工作树中完全删除。
对于 *.pyc
文件,也许这是可以接受的(因为 Python quickly/quietly 无论如何都会重新生成它们);对于其他文件可能不是,所以这充其量是一种 'use with caution' 方法。
另一种方法 - 避免上述问题但有其自身的成本 - 是重写历史记录,使被忽略的文件看起来从未提交过。
请注意,与任何历史记录重写一样,您必须与共享该存储库的任何其他人协调
如果您决定遵循此路径,现有 questions/answers 记录了该过程;你会用 tree-filter 或 index-filter.
寻找 git-filter-branch
尝试git rm --cached */__pycache__/*
.gitignore
文件仅通知 git 不应跟踪哪些新文件。不要从存储库中删除已跟踪的文件。
这是我的 .gitignore
:
*__pycache__*
*.pyc
db.sqlite3
*.DS_Store
media/
res/
我可以在我的 Atom 上看到 __pycache__
目录被 VcsIgnored(这意味着被识别为不受 [=40= 控制的版本])
但是,无论如何,当我对文件进行更改时,我会在我的 Atom git window:
我不知道问题出在 git 还是 Atom.
已更新以解决评论中的 follow-up 个问题
.git忽略 仅 适用于未跟踪的文件。
如果路径显示为 "modified" 或 "unstaged",这意味着文件已经被跟踪 - 它们在索引中并且可能在您将它们放入 git 之前的先前提交中忽略,或者它们是在您将它们放入 gitignore.
后强制添加的所以您试图忽略对跟踪文件的修改,这不是您可以在 git 中执行的操作。
(明确地说,您可能会找到答案,说您可以在索引上使用各种标志来忽略对暂存文件的更改。这几乎总是会导致麻烦,因为这不是这些标志的用途。)
那么如何忽略这些文件呢?你必须告诉 git 停止跟踪他们。这很容易做到,但它有潜在的麻烦副作用。
假设您没有很多 long-lived 分支,简单的方法是 git rm --cached
取消暂存更改,然后创建新的提交。例如,如果你只担心清理 master 分支,你可以
git checkout master
git rm -r --cached __pycache__ # or whatever other paths
git commit -m "remove unwanted files'
现在你应该发现,git status
默认不显示这些文件,git add
也不添加。但是,如果你做了一些改变文件的事情然后
git checout HEAD^
回到包含这些文件的提交,git 将悄悄地破坏您对这些文件所做的更改,即使它没有要从中恢复的更改副本。当你随后
git checkout master
它们将从工作树中完全删除。
对于 *.pyc
文件,也许这是可以接受的(因为 Python quickly/quietly 无论如何都会重新生成它们);对于其他文件可能不是,所以这充其量是一种 'use with caution' 方法。
另一种方法 - 避免上述问题但有其自身的成本 - 是重写历史记录,使被忽略的文件看起来从未提交过。
请注意,与任何历史记录重写一样,您必须与共享该存储库的任何其他人协调
如果您决定遵循此路径,现有 questions/answers 记录了该过程;你会用 tree-filter 或 index-filter.
寻找 git-filter-branch
尝试git rm --cached */__pycache__/*
.gitignore
文件仅通知 git 不应跟踪哪些新文件。不要从存储库中删除已跟踪的文件。