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

这可能吗?


当前回答

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

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

其他回答

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

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

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

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

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

另请参阅本文中引用的来自Git维护者的电子邮件、Git文档Git -update-index以及FallenGameR关于两者如何应对不同场景的博客条目。

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

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

另一个使用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

确定。

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

要撤消并重新开始跟踪:

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