默认情况下“git update-index --assume-unchanged”
在git中,默认情况下在给定的一组文件中有git update-index --assume-unchanged FILE_NAME
的结果吗?例如,一个git配置文件列出了默认情况下未跟踪更改的文件,以便我们在克隆repo后不必运行命令?这些文件将以默认格式存在于存储库中,由开发人员提取,无论他们对文件所做的任何更改都不会被跟踪,也不会被后面的拉取改写。默认情况下“git update-index --assume-unchanged”
例如:我有一个web.config文件,其中包含项目使用的连接字符串的占位符。理想情况下,开发人员将克隆repo,并使用指向其本地资源的连接字符串替换占位符。无需运行任何命令。这样,除非在回购中web.config文件的格式发生了变化,并且它们的本地更改不会推送到回购库,否则这些更改将保留在后端回收中。
这是可以在配置文件的git中实现吗?或者,我是否总是必须运行“假定文件集不变”的命令?
一个更好的方法(不是试图twek指数,与assume-unchanged
或skip-worktree
)是不跟踪在所有这些文件,但生成它们(并确保他们在的.gitignore,这是不跟踪和忽略)
这样的话,你可以将在本地进行修改,而不必在所有来管理他们的Git指数状态(因为它们没有跟踪)
对于这一点,你的版本和跟踪:
- a
file.tpl
(带占位符值的模板文件)。 - 能够采取一个模板文件,并产生实际的文件(这仍然是未经跟踪,私人)
- 一个
.gitignore
其忽略结果生成的文件 - 一个
.gitattribute
声明smudge
内容过滤器(见下文)的脚本
文件的产生是通过一个content filter driver自动化的,使用.gitattributes
declaration。
(图片来自"Customizing Git - Git Attributes"从“Pro Git book”))
一旦你宣布你的本地配置的内容过滤器驱动程序,它会自动运行,git checkout
,生成您(不跟踪)文件您。
请参阅“Best practice - Git + Build automation - Keeping configs separate”中的完整示例。
真棒,这听起来很干净,我!关于通常用于基于模板生成这些类型文件(web.config等)的工具的任何想法? –
@HeitorCastro它可以自定义。或者它取决于实际的Web框架(例如https://support.microsoft.com/en-us/help/815179/how-to-create-the-web-config-file-for-an-asp-net (或http://www.timschaeps.com/using-t4-templates-to-generate-multiple-web-config-files/) – VonC
简短的答案是“否”,稍微长一点的答案是“不这样做,但如果你必须的话,你可能需要'--skip-worktree'”。 (你应该做的是,一般来说,完全忽略*这些文件,从不提交它们,而是让存储库包含“样本”或“默认”文件,而不是忽略安装脚本的复制和更改-if-appropriate。你需要这个安装脚本来运行'git update-index',所以你可以让它复制和调整。) – torek