在 git 中有没有办法在给定的一组文件上默认得到 git update-index --assume-unchanged FILE_NAME
的结果?例如,一个 git 配置文件列出了默认情况下不跟踪更改的文件,这样我们就不必在克隆 repo 后运行命令?这些文件将以默认格式存在于存储库中,由开发人员 pull ,并且他们对文件所做的任何更改都不会被跟踪,也不会被后 pull 覆盖。
例如:我有一个 web.config 文件,其中包含项目使用的连接字符串的占位符。理想情况下,开发人员会克隆存储库并用指向其本地资源的连接字符串替换那些占位符。无需运行任何命令。这样,这些更改将保留在后 pull 中,除非 web.config 文件的格式在 repo 中发生更改,并且它们的本地更改不会被推送到 repo 。
这在 git 中可以通过配置文件实现吗?或者我是否总是必须运行“假设未更改的文件集”的命令?
最佳答案
一个更好的方法(比尝试调整索引,使用 assume-unchanged
或 skip-worktree
)是不跟踪这些文件完全没有,但要生成它们(并确保它们在 .gitignore 中,即 不 跟踪和忽略)
那样的话,你可以随意在本地修改它们,根本不需要管理它们的 Git 索引状态(因为它们没有被跟踪)
为此,您进行版本和跟踪:
file.tpl
(带有占位符值的模板文件)。- 能够获取模板文件并生成实际文件(保持未跟踪、私有(private))的脚本
- 一个
.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”中的完整示例。
关于git - 默认为 "git update-index --assume-unchanged",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46353292/