Git diff无法忽略.gitignore中指定的文件

21
我对git不熟悉,不知道我做错了什么。 我想运行git diff --name-only,但我想排除以.test结尾的文件,这意味着即使这些文件已更改,我也不希望git diff输出更改信息。 我尝试将这些文件添加到.gitignore文件中,但这样做只是在运行git diff命令时包含.gitignore!
我做错什么了?如何在运行git diff时排除文件?

1
展示你的 .gitignore 文件内容。 - bengoesboom
1
你可能在gitignore文件中犯了一个错误,我们可以在你发布后查看是否有误。 - usumoio
1个回答

26

好的,这是你做错了的地方。Git将继续跟踪那些文件,因为你之前已经在项目中开始跟踪它们了。在之前的某个时刻,你是否运行了一个类似于下面这样的初始提交:

git add . # this added everything to the tracking system including your .test files
git commit -a -m 'I just committed everything in my project .test files included'

将文件放入你的.gitignore文件中可以防止以.test结尾的文件进入你的项目,但你需要从git的内存中删除已经被追踪的.test文件。将文件放入.gitignore不会对已经被追踪的文件产生任何作用。现在你需要执行以下操作:

选项1:

# you can remove the files from gits tracking system and then put them back
# when you go to put them back now git will have no memory of tracking these
# and will consider future edits to be ignored
# Back your .test files up before doing this, and this will delete them from your project
git rm /path/to/your/file.test

选项 2:

# this is safer but does not use gitignore at all
git update-index --assume-unchanged /path/to/your/file.test
当你运行选项2时,你告诉git那个文件在未来不会再发生改变(即使在现实生活中有所变化)。这样可以让你将`.test`文件作为已跟踪的项目的一部分(就像现在一样),但是git将永远不会再打扰你关于对它们的更改。请注意,此操作随时可以撤消,并且不会破坏文件,因此更加安全。在使用之前,建议先阅读相关文档:https://www.kernel.org/pub/software/scm/git/docs/git-update-index.html

2
对于 git 1.8 版本,命令将是: git update-index --assume-unchanged /path/to/your/file.test 顺便说一句,非常好的答案,帮了我很多忙。 - fabregas88
没问题,我很高兴能帮助到你。 - usumoio
7
使用 git rm --cached 命令只会将文件从索引中移除,无需事先备份。 - Graeme
update--index 中有一个小错别字。它应该只有一个 - - regina_fallangi
1
@regina_fallangi 已修复! - matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接