【问题标题】:"git update-index --assume-unchanged" by default"git update-index --assume-unchanged" 默认
【发布时间】:2018-03-03 08:36:37
【问题描述】:

git 有没有办法在给定的一组文件上默认得到git update-index --assume-unchanged FILE_NAME 的结果?例如,一个 git 配置文件,它列出了默认不跟踪更改的文件,这样我们在克隆 repo 后就不必运行命令?这些文件将以默认格式存在于存储库中,由开发人员拉取,并且他们对文件所做的任何更改都不会被后续拉取跟踪或覆盖。

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

这在 git 中可以通过配置文件实现吗?还是我总是必须运行“一组文件假定不变”的命令?

【问题讨论】:

  • 简短的回答是“不”,稍长一点的回答是“不要那样做,但如果你必须这样做,你可能想要--skip-worktree”。 (通常,您应该做的是完全忽略这些文件,永远不要提交它们,而是让存储库包含“示例”或“默认”文件,而不是忽略安装脚本如果合适,请复制和更改。您需要此安装脚本才能运行 git update-index,因此您可以使用它进行复制和调整。)

标签: git web-config config ignore


【解决方案1】:

更好的方法(比尝试使用assume-unchangedskip-worktree 调整索引)是根本不跟踪这些文件,而是生成它们(并确保它们在.gitignore,即被跟踪和忽略)

这样,您可以在本地随意修改它们,而根本无需管理它们的 Git 索引状态(因为它们没有被跟踪)

为此,您的版本和跟踪:

  • 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”中的完整示例。

【讨论】:

猜你喜欢
  • 2013-04-27
  • 2011-08-31
  • 2012-08-30
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
相关资源
最近更新 更多