我想更改仅用于开发的跟踪文件,但保持跟踪版本不变。
此建议的大多数“解决方案”
git update-index --assume-unchanged
但它完全没用,因为文件仍然会被结帐或重置更改。是否有更好的解决方案可以在结账和重置命令后继续存在?
答案 0 :(得分:11)
这是我认为您正在尝试做的事情,更改文件,但在提交时忽略它。
git update-index --skip-worktree my-file
关于difference between assume-unchanged
and skip-worktree
,这是一个很好的答案。
如果您尝试将更改合并到my-file
,Git仍会发出警告。然后你必须“解开”文件,合并它并“重新跳过”它。
git update-index --no-skip-worktree my-file
# merge here
git update-index --skip-worktree my-file
如果修改文件,然后切换到已更改该文件的分支,也可能会出现问题。你可能不得不做一些花哨的“跳过/取消通知”操作来解决这个问题。
从长远来看,您可能希望将“本地”更改分成第二个文件。例如,如果要更改的文件是配置文件,请创建一个您在存储库中检查的“默认”配置文件。然后,允许第二个“覆盖”配置文件是可选的,并将该文件放在.gitignore
中。
然后,在您的应用程序中,读取默认配置文件,然后检查覆盖文件是否存在。如果是,请将该数据与默认文件中的数据合并。
此示例适用于配置文件,但如果需要,您可以将该技术用于其他类型的覆盖。
答案 1 :(得分:1)
由于您在其中一条评论中直接在master
分支机构工作,因此要解决的真正问题是master
。
您想要在Git中创建一个主题分支:
git checkout -b some_feature_or_bug_fix master
然后对配置文件进行必要的更改,并正常提交。
这里的好处是你不会影响master
中的文件。如果您需要提取更新的代码,只需将git fetch
和git merge origin/master
添加到您的主题分支中。然后你可以像普通的Git合并一样处理配置文件的上游更改。
在将主题分支合并到master
之前,您可以进行交互式压缩以减少提交并将提交合并到一个不错的干净提交中。或者执行git merge --squash
将您的主题分支合并到master
。