默认情况下,“git update-index --assume-unchanged”

9
在git中,是否有一种方法可以默认对给定的一组文件使用 git update-index --assume-unchanged FILE_NAME 命令?例如,一个git配置文件,列出那些默认情况下不跟踪其更改的文件,这样我们在克隆仓库后就不必运行该命令了。这些文件应以默认格式存在于仓库中,由开发人员拉取,他们对文件所做的任何更改都不会被跟踪或覆盖。
例如:我有一个包含连接字符串占位符的web.config文件,该占位符由项目使用。理想情况下,开发人员将克隆存储库并将这些占位符替换为指向其本地资源的连接字符串。无需运行任何命令。这样,这些更改将被保存在之后的拉取中,除非web.config文件的格式在存储库中发生了更改,并且他们的本地更改不会被推送到存储库中。
在git中是否能通过配置文件实现此目标?还是我总是要为“假定未更改的文件集”运行该命令?

3
简短回答是“不”,稍微长一些的回答是“不要那样做,但如果你必须这样做,你可能想要用 --skip-worktree”。通常情况下,你应该完全忽略这些文件,不要提交它们,在仓库中包含“示例”或“默认”文件,而不是忽略它们,一个安装脚本将其复制并进行必要的更改。你需要运行 git update-index 的安装脚本,这样它就能够复制和修改了。 - torek
1个回答

3
比起尝试使用 assume-unchangedskip-worktree 来调整索引的方法,更好的方法是根本不跟踪这些文件,而是生成它们(并确保将它们放在 .gitignore 中,即不被跟踪和忽略)。
这样,您可以随意在本地修改它们,而无需管理它们的 Git 索引状态(因为它们没有被跟踪)。
为此,您需要版本控制和跟踪以下内容:
  • 一个 file.tpl(带有占位符值的模板文件)。
  • 一个能够接受模板文件并生成实际文件的脚本(仍然未被跟踪,保密)。
  • 一个忽略生成的文件的 .gitignore
  • 声明了 smudge 内容过滤器的 .gitattribute(请参见下文)。
通过使用 内容过滤驱动程序,使用 .gitattributes 声明 自动化生成文件。

https://istack.dev59.com/tumAc.webp
(该图片来源于 "自定义Git-Git属性" 自 "Pro Git书籍"))

一旦您在本地配置中声明了内容过滤器驱动程序,它将在 git checkout 时自动生成您的(未跟踪的)文件。
请参见 "最佳实践-Git+构建自动化-保持配置文件分离" 中的完整示例。


太棒了,听起来对我来说非常清楚!您有什么关于通常用于根据模板生成这些类型文件(如web.config)的工具的想法吗? - Heitor Castro
@HeitorCastro 这可以是自定义的。或者这取决于实际的Web框架(例如https://support.microsoft.com/en-us/help/815179/how-to-create-the-web-config-file-for-an-asp-net-application)(或http://www.timschaeps.com/using-t4-templates-to-generate-multiple-web-config-files/)。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接