有一个Git项目需要构建一些本地配置。是否有可能提交一个文件说 env.config ,任何克隆本地repo的人都会根据他的需要覆盖此配置文件。我希望Git在提交时忽略 env.config 中的任何进一步更改。
我可以在 .gitignore 中添加条目,但这也会从repo中删除默认版本的文件。
任何想法??
答案 0 :(得分:2)
在这种情况下,我通常会将 env.config.template 添加到存储库,将实际的 env.config 添加到.gitignore。每个用户都应该根据模板创建自己的 env.config 。
另一个解决方案是要求用户不要提交更改,甚至阻止意外提交,包括git-hook中的配置文件。但是,我认为添加模板有点清晰:它只需要一次特殊操作(复制),并且每次提交都不需要小心。
答案 1 :(得分:2)
在我的观点中,我宁愿将文件添加为env.config.example
或类似的内容,并为.gitignore
env.config
添加条目。
答案 2 :(得分:2)
您有3个主要选项:
.gitignore
- Git将从现在开始忽略您所有克隆的文件。assume unchanged
- 在关闭之前,会暂时忽略本地克隆上的文件。smudge/clean
过滤器.gitignore
强> 这种方式的问题是,一旦将文件传输到存储库,就不会被忽略。
首先必须将其添加到.gitignore
,然后force
将其添加到存储库并提交。
--[no-]assume-unchanged
强> 如果你仍然想要存储库中的文件(如提出的那样),你应该在被跟踪文件上使用assume-unchanged
标志。
https://git-scm.com/docs/git-update-index
指定此标志时,不会更新为路径记录的对象名称 相反,此选项设置/取消设置路径的“假设未更改”位。
当“假定未更改”位打开时,用户承诺不更改文件并允许Git假定工作树文件与索引中记录的文件匹配。如果要更改工作树文件,则需要取消设置该位以告知Git。当在具有非常慢的lstat(2)系统调用(例如cifs)的文件系统上处理大项目时,这有时很有用。
如果需要在索引中修改此文件,Git将失败(优雅地),例如合并时提交;因此,如果上游更改了假定未跟踪文件,则需要手动处理该情况。
Smudge/clean
强> 阅读所有相关内容并在此处进行设置:
https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes
事实证明,您可以编写自己的过滤器,以便在提交/结帐上的文件中进行替换。
这些称为
clean
和smudge
过滤器。在
.gitattributes
文件中,您可以为特定路径设置过滤器,然后设置将在检出文件之前处理文件的脚本(“涂抹”,见图8-2)和之前的文件他们上演了(“干净”,见图8-3)。这些过滤器可以设置为做各种有趣的事情。
答案 3 :(得分:0)
您可以在案件中使用git update-index
。
git update-index --no-assume-unchanged env.config
当"假设不变" bit打开,git停止检查工作树文件是否可能进行修改。