我的仓库中有一个配置文件,不应该对其进行更改。
问题是,当我对文件进行更改时,它们会被git status选中。我已经尝试了各种方法来忽略对它的更改。
当我克隆回购时,如何自动忽略它,以便我对文件所做的任何更改都不应该被git选中?
我尝试过的解决方案:
将文件添加到.gitignore
。似乎不起作用。这是因为该文件已经在索引上了吗?
使用git update-index --assume-unchanged path/to/file
。似乎工作了一些,但只是我的克隆回购本地。其他克隆者需要应用相同的命令。
我已经尝试过寻找其他答案,但其他解决方案似乎无法正常运作。我觉得这应该很简单,所以任何指导都会有所帮助!
答案 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
中而被忽略)
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
上自动生成的实际配置文件中受益。
其他克隆者需要应用相同的命令。
是的,但是在这里,如果没有,他们将根本没有配置文件。
这比使文件在不应该被修改时更容易被修改更为可见。