我需要忽略对Git已经跟踪的特定文件所做的任何更改。不应从本地或远程存储库中删除这些文件。
我试图在.gitignore中忽略它们,但它不起作用。
的.gitignore:
$MAVEN_PATH_TO_CHILD_MODULE/src/main/java/$PACKAGE/$CLASS.java
知道为什么吗?
答案 0 :(得分:5)
只能忽略未跟踪文件(未添加到Git)。或者换句话说,忽略Git不知道的文件,即不在索引中(在暂存区域没有条目)。
要使文件未跟踪(从索引中删除它,从而在下一次提交中将其从删除中暂存),但将其保存在工作区域中,即在文件系统中,您可以使用
$ git rm --cached <file>
在本地提交之后,以及在推送到远程之后,文件将从远程存储库中删除(从顶部提交树中 - 它将仍然存在于历史记录中)。
如果您希望Git忽略更改,以便git diff
和git status
不会报告这些更改,并且git commit -a
不会提交更改(git add <file>
+ {{1并且git commit
仍会添加它们),您可以使用此技巧 谎言到Git(参见git ready » temporarily ignoring files文章):
git commit <file>
git update-index
命令是低级(管道)命令。您可以找到哪些文件是“ 假定未更改 ”:
$ git update-index --assume-unchanged <file>
git ls-files -v
使用小写字母表示标记为假定未更改的状态文件。
您可以使用
将其关闭$ git ls-files -v
h <file>
请注意,此选项的最初目的是加速$ git update-index --no-assume-unchanged <file>
缓慢的平台上的状态。
关注@Dave评论,并引用Git - Difference Between 'assume-unchanged' and 'skip-worktree'问题,现代Git中的另一个选项是让Git不使用工作区版本 skip-worktree 位。
您可以使用
为已跟踪的文件启用它stat
这使得Git使用索引版本(最后提交的版本)代替文件系统中的版本。您可以使用
检查哪个文件的位设置$ git update-index --skip-worktree <file>
$ git ls-files -v
S <file>
命令将使用git ls-files -v
来表示设置了“skip-worktree”的文件。
请注意,此选项的初始目的是支持稀疏结账。
答案 1 :(得分:3)
.gitignore只是告诉git哪些未跟踪的文件要忽略,所以如果你的文件已被git跟踪,它就不会做任何事情。相反,您可以告诉git使用此命令暂时忽略对跟踪文件的任何更改:
git update-index --assume-unchanged <file>
如果你想撤消这个,只需运行:
git update-index --no-assume-unchanged <file>
有关详细信息,请参阅here。
答案 2 :(得分:-1)
取消阻止您要忽略的文件:
git rm --cached <file>
然后您可以添加文件,.gitignore
将不会跟踪被忽略的文件。