" git update-index --assume-unchanged"默认情况下

时间:2017-09-21 21:16:35

标签: git web-config config ignore

git中是否有一种方法可以在给定的文件集上默认使用git update-index --assume-unchanged FILE_NAME的结果?例如,一个git配置文件列出了默认情况下未跟踪更改的文件,这样我们就不必在克隆repo后运行命令了?这些文件将以默认格式存在于存储库中,由开发人员提取,并且他们对文件所做的任何更改都不会被后拉动跟踪或覆盖。

例如:我有一个web.config文件,其中包含项目使用的连接字符串的占位符。理想情况下,开发人员将克隆repo并使用指向其本地资源的连接字符串替换这些占位符。无需运行任何命令。这样,除非web.config文件的格式在repo中发生变化,并且它们的本地更改不会被推送到repo,因此这些更改将保留在后向拉取中。

这可以通过配置文件在git中实现吗?或者我是否总是必须为"文件集运行命令以保持不变"?

1 个答案:

答案 0 :(得分:2)

更好的方法(比尝试使用assume-unchangedskip-worktree调整索引)是跟踪这些文件,而是生成它们(并制作)确定它们在.gitignore中,跟踪并忽略

这样,你可以随意修改它们,而不必管理它们的Git索引状态(因为它们没有被跟踪)

为此,您进行版本和跟踪:

  • 一个file.tpl(带占位符值的模板文件)。
  • 一个能够获取模板文件并生成实际文件(仍未跟踪,私有)的脚本
  • 一个.gitignore忽略生成的文件
  • .gitattribute声明smudge内容过滤器(见下文)

使用content filter driver通过 .gitattributes declaration 自动生成文件。

https://i.stack.imgur.com/tumAc.png
(来自"Customizing Git - Git Attributes"的图片来自" Pro Git book"))

在本地配置中声明内容文件管理器驱动程序后,它会自动在git checkout为您生成(未跟踪)文件。
请参阅" Best practice - Git + Build automation - Keeping configs separate"。

中的完整示例