忽略对跟踪文件的更改
Ignore changes to a tracked file
我想更改一个仅用于开发的跟踪文件,但保持跟踪版本不变。
大多数"solutions" 对此建议
git update-index --assume-unchanged
但这完全没用,因为文件仍然会被检出或重置更改。是否有更好的解决方案可以在结帐和重置命令中幸存下来?
由于在您的评论之一中您直接在 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
.
快速修复
这就是我认为您正在尝试做的,更改文件,但在提交时忽略它。
git update-index --skip-worktree my-file
这里是关于 difference between assume-unchanged
and skip-worktree
的一个很好的答案。
如果您尝试将更改合并到 my-file
,Git 仍会发出警告。然后你将不得不 "unskip" 文件,合并它并 "re-skip" 它。
git update-index --no-skip-worktree my-file
# merge here
git update-index --skip-worktree my-file
如果您修改文件,然后切换到更改该文件的分支,也可能会出现问题。你可能需要做一些花哨的 "skip/unskip" 操作来解决这个问题。
长期修复
从长远来看,您可能希望将 "local" 更改分离到第二个文件中。例如,如果您要更改的文件是配置文件,请创建一个 "default" 配置文件,然后将其签入存储库。然后,允许第二个 "overrides" 配置文件是可选的,并将该文件放入您的 .gitignore
.
然后,在您的应用程序中,读取默认配置文件,然后检查覆盖文件是否存在。如果是,将该数据与默认文件中的数据合并。
此示例适用于配置文件,但如果需要,您可以将该技术用于其他类型的覆盖。
我想更改一个仅用于开发的跟踪文件,但保持跟踪版本不变。
大多数"solutions" 对此建议
git update-index --assume-unchanged
但这完全没用,因为文件仍然会被检出或重置更改。是否有更好的解决方案可以在结帐和重置命令中幸存下来?
由于在您的评论之一中您直接在 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
.
快速修复
这就是我认为您正在尝试做的,更改文件,但在提交时忽略它。
git update-index --skip-worktree my-file
这里是关于 difference between assume-unchanged
and skip-worktree
的一个很好的答案。
my-file
,Git 仍会发出警告。然后你将不得不 "unskip" 文件,合并它并 "re-skip" 它。
git update-index --no-skip-worktree my-file
# merge here
git update-index --skip-worktree my-file
如果您修改文件,然后切换到更改该文件的分支,也可能会出现问题。你可能需要做一些花哨的 "skip/unskip" 操作来解决这个问题。
长期修复
从长远来看,您可能希望将 "local" 更改分离到第二个文件中。例如,如果您要更改的文件是配置文件,请创建一个 "default" 配置文件,然后将其签入存储库。然后,允许第二个 "overrides" 配置文件是可选的,并将该文件放入您的 .gitignore
.
然后,在您的应用程序中,读取默认配置文件,然后检查覆盖文件是否存在。如果是,将该数据与默认文件中的数据合并。
此示例适用于配置文件,但如果需要,您可以将该技术用于其他类型的覆盖。