我在一个存储库中有一些跟踪文件,在构建代码时自动修改。我不想取消跟踪它们,我只是不想让它们显示为已修改,我不想让它们在git add时被显示。
这可能吗?
我在一个存储库中有一些跟踪文件,在构建代码时自动修改。我不想取消跟踪它们,我只是不想让它们显示为已修改,我不想让它们在git add时被显示。
这可能吗?
当前回答
确定。
git update-index --assume-unchanged [<file> ...]
要撤消并重新开始跟踪:
git update-index --no-assume-unchanged [<file> ...]
其他回答
另一种方法(来自Seth Robertson的一个现已删除的回答,但我发现它有助于恢复它)是维护一个“跟踪”模板文件,然后有一个本地未跟踪的版本,例如:“config.sample.ini”或“config.ini”。完整示例参见https://gist.github.com/canton7/1423106。
然后,如果文件在git中被更改,就不会有任何问题,等等,你可以在本地未跟踪的文件上使用.gitignore(最后)。
确定。
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
公认的答案不正确。——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关于两者如何应对不同场景的博客条目。