如何停止跟踪文件并在Git中保持其当前状态?

时间:2016-03-13 23:12:49

标签: git gitignore

我有一个python程序的配置文件,用户必须插入一个API密钥。

我正在使用Git跟踪该文件,我将该文件仅作为模板表单提交。

我需要使用我的私有API密钥自己使用该文件,所以如何告诉Git模板版本是" final"版本并且不跟踪任何进一步的变化?

2 个答案:

答案 0 :(得分:2)

您可以将文件标记为" skip-worktree",从那一刻起,对diff和commit的更改将被忽略:

git update-index --skip-worktree filename

当合并或拉动影响文件时,您将收到错误并且必须重置标志(这样做是为了防止错误)。

请参阅https://www.kernel.org/pub/software/scm/git/docs/git-update-index.html

答案 1 :(得分:0)

  

我需要使用我的私有API密钥自己使用该文件,所以如何告诉Git模板版本是" final"版本并且不跟踪任何进一步的变化?

将文件添加到您的存储库后,将其添加到.gitignore将无效,因为它已由git跟踪。

您需要使用assume-unchanged标志
https://git-scm.com/docs/git-update-index

git update-index --assume-unchanged <path>

如果您需要打印标有--assume-unchanged标志的文件列表:

git ls-files -v|grep '^h'

- [无糖]假设-不变

  

指定此标志时,不会更新为路径记录的对象名称。

     

相反,此选项设置/取消设置&#34;假设未更改&#34;路径的位。

     

当&#34;假设不变&#34;如果位为on,则用户承诺不更改文件并允许Git假定工作树文件与索引中记录的文件匹配。如果要更改工作树文件,则需要取消设置该位以告知Git。当在具有非常慢的lstat(2)系统调用(例如cifs)的文件系统上处理大项目时,这有时很有用。

     

如果需要在索引中修改此文件,Git将失败(优雅地),例如合并时提交;因此,如果上游更改了假定未跟踪文件,则需要手动处理该情况。

enter image description here