是否可以配置 git rerere
使其仅记住特定文件模式并对其应用 merge 解决方案?即:就在模式 pom.xml
上。
最佳答案
这是一个棘手的问题,但我可以想到一个解决方案,该解决方案涉及在 merge 操作之后(但在任何手动解析之前)立即调用脚本。
首先,冲突解决方案的缓存 (.git/rr-cache
) 按 blob 哈希而不是按文件路径存储。没有任何迹象表明决议实际上来自哪个文件,所以我认为破解该目录不是一个可行的解决方案。
This quote维护者 Junio Hamano 也强调 rerere 是按 merge 而不是按文件的事实:
There is no "I do not care if there are good resolutions remembered that do not have anything to do with the current merge, just remove all of them"---that is what "rm -fr .git/rr-cache" is for.
...这当然对您没有用,因为有选择地从 .git/rr-cache
中删除文件不太适合您的用例中的自动化。
要利用的功能可能是采用路径规范的 forget
子命令。然而,“遗忘”只能在 merge 的上下文中发生,这使得它从根本上不同于 .gitignore
之类的静态应用。
但是,可以想象您可以有一个调用脚本的 merge 后 Hook :
遍历冲突文件:
git diff --name-only --diff-filter=U
对于每一个你想要“un-rerere”的文件,忘记它吧:
git rerere forget -- path/to/file
...并恢复冲突:
git checkout -m path/to/file
然后,继续像往常一样进行 merge ,保留您想要完整记住的文件的相关分辨率。
可以将要“rerere remembered”的文件列表 checkin 存储库(可能在名为 .reremember
的文件中)并从脚本中查询。
关于Git rerere 文件模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31734359/