我的存储库中有一个配置文件,不应该对其提交更改。
问题是,当我对文件进行更改时,它们会被 git status 获取。我尝试了各种方法来忽略对其的更改。
当我克隆 repo 时如何自动忽略它,这样我对文件所做的任何更改都不应该被 git 获取?
我尝试过的解决方案:
将文件添加到
.gitignore
。似乎不起作用。这是因为文件已经在索引中了吗?使用
git update-index --assume-unchanged path/to/file
。似乎有些工作,但只是我克隆的仓库的本地工作。其他克隆人需要应用相同的命令。
我已经尝试查看其他答案,但其他解决方案似乎无法正常工作。我觉得这应该很简单,所以任何指导都会有所帮助!
最佳答案
I have a config file in my repo that shouldn't get changes committed to it.
那么...首先不要提交该文件。
提交该文件的通用版本,用于生成实际文件的模板(作为私有(private)非版本文件,添加到您的 .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
每个克隆该 repo 的用户都需要在本地激活涂抹“配置”内容过滤器驱动程序。
cd /path/to/repo
git config filter.config.smudge YourScript
最后一步是每个用户唯一需要做的一步,以便从每次 git checkout
上自动生成的实际配置文件中获益。
Others who clone need to apply the same command.
是的,但是在这里,如果他们不这样做,他们将根本没有配置文件。
这比在不应该修改文件时准备好修改文件更明显。
关于Git 忽略对已提交文件的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27839263/