我在一个存储库中有一些跟踪文件,在构建代码时自动修改。我不想取消跟踪它们,我只是不想让它们显示为已修改,我不想让它们在git add时被显示。
这可能吗?
确定。
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将文件显示为“未更改”。
--assume-unchanged
然而,同样的命令,但是带有选项--skip-worktree,是可以工作的。因此,为了防止跟踪但已更改的文件在Git状态中显示为已更改,请使用
--skip-worktree
git update-index --skip-worktree [<file> ...]
撤消并重新显示已更改的内容:
git update-index --no-skip-worktree [<file> ...]
另请参阅这个答案中引用的来自Git维护者的电子邮件,Git文档git-update-index和FallenGameR的博客文章关于两者如何对不同场景做出反应。