Git忽略对已提交文件的更改

时间:2015-01-08 11:39:09

标签: git gitignore

我的仓库中有一个配置文件,不应该对其进行更改。

问题是,当我对文件进行更改时,它们会被git status选中。我已经尝试了各种方法来忽略对它的更改。

当我克隆回购时,如何自动忽略它,以便我对文件所做的任何更改都不应该被git选中?

我尝试过的解决方案:

  1. 将文件添加到.gitignore。似乎不起作用。这是因为该文件已经在索引上了吗?

  2. 使用git update-index --assume-unchanged path/to/file。似乎工作了一些,但只是我的克隆回购本地。其他克隆者需要应用相同的命令。

  3. 我已经尝试过寻找其他答案,但其他解决方案似乎无法正常运作。我觉得这应该很简单,所以任何指导都会有所帮助!

1 个答案:

答案 0 :(得分:1)

  

我的存储库中有一个配置文件,该配置文件不应将更改提交给它。

然后...首先不要提交该文件。
提交该文件的通用版本,即用于生成实际文件的模板(作为私有非版本文件,添加到您的.gitignore中)。

该生成将在git checkout上自动进行。

首先,重命名现有文件:

git mv afileToIgnore afile.tpl
git commit -m "record template value file"

然后将afileToIgnore添加到.gitignore文件中:git status将不再显示要添加/更改的文件。

现在,声明一个污迹 content filter driver ,该文件会自动重新生成该文件(由于文件位于.gitignore中而被忽略)

https://git-scm.com/book/en/v2/images/smudge.png

smudge脚本(可以版本):YourScript

copy aFileToIgnore.tpl aFileToIgnore

在版本化的.gitattributes中声明内容过滤器驱动程序:

echo 'aFileToIgnore.tpl config' >> .gitattributes

该污点“ config”内容过滤器驱动程序需要由每个克隆该存储库的用户本地激活。

cd /path/to/repo
git config filter.config.smudge YourScript

最后一步是每个用户需要执行的唯一步骤,以便从每个git checkout上自动生成的实际配置文件中受益。


  

其他克隆者需要应用相同的命令。

是的,但是在这里,如果没有,他们将根本没有配置文件。
这比使文件在不应该被修改时更容易被修改更为可见。