Git:忽略被跟踪的文件

我在一个存储库中有一些跟踪文件,在构建代码时自动修改。我不想取消跟踪它们,我只是不想让它们显示为已修改,我不想让它们在git add时被显示。

这可能吗?

71366 次浏览

确定。

git update-index --assume-unchanged [<file> ...]

要撤消并重新开始跟踪:

git update-index --no-assume-unchanged [<file> ...]

另一个使用git属性和%f在filter命令的解决方案:

git config filter.orig.clean "cat %f.orig"
cp filename filename.orig
echo "filename filter=orig" >> .git/info/attributes
echo "filename.orig" >> .git/info/exclude

另一种方法(来自Seth Robertson的一个现已删除的回答,但我发现它有助于恢复它)是维护一个“跟踪”模板文件,然后有一个本地未跟踪的版本,例如:“config.sample.ini”或“config.ini”。完整的例子见https://gist.github.com/canton7/1423106

然后,如果文件在git中被更改,就不会有任何问题,等等,你可以在本地未跟踪的文件上使用.gitignore(最后)。

公认的答案不正确。--assume-unchanged只会导致Git跳过某些(有时是昂贵的)文件系统检查——它不能保证Git将文件显示为“未更改”。

然而,同样的命令,但是带有选项--skip-worktree,是可以工作的。因此,为了防止跟踪但已更改的文件在Git状态中显示为已更改,请使用

git update-index --skip-worktree [<file> ...]

撤消并重新显示已更改的内容:

git update-index --no-skip-worktree [<file> ...]

另请参阅这个答案中引用的来自Git维护者的电子邮件,Git文档git-update-indexFallenGameR的博客文章关于两者如何对不同场景做出反应。