18

我正在尝试使用共享的 rerere 缓存来自动化一次性集成/测试分支。

这个想法是,当分支被推送时,rerere 缓存应该是最新的,这样这些合并总是会通过。但是,它们不会:

>>> git merge --no-ff invoicing
Staged 'analysisrequest.py' using previous resolution.
Staged '__init__.py' using previous resolution.
Auto-merging __init__.py
CONFLICT (content): Merge conflict in __init__.py
Auto-merging analysisrequest.py
CONFLICT (content): Merge conflict in analysisrequest.py
Automatic merge failed; fix conflicts and then commit the result.

在这一点上,rerere 已经上演了它记得的决议,并且不存在实际冲突。我可以运行git commit,然后继续,但我的 integration-test-build 脚本出现错误。我尝试添加--rerere-autoupdate到 git merge 命令,但没有任何变化。我已将 repo 配置为启用和自动应用 rerere 匹配。

如果足够,我如何要求 git merge 使用我以前的解决方案并继续而不失败?

4

1 回答 1

17

即使有了--rerere-autoupdate标志,git merge似乎也不愿意在没有一些人工输入的情况下自动完成合并。相反,它以错误状态执行,并且您的集成工具拒绝继续。

我不知道您的自动合并是如何发生的,即您是否可以更改执行的 Git 命令。如果可以,那么您可以执行以下命令。

git merge --no-ff branch-to-merge --rerere-autoupdate
if [[ $(git rerere diff) ]]
then
    git commit --no-edit
else
    $(exit 1)
fi
  • git rerere diff列出需要在rerere.
  • --no-edit是防止打开提交消息编辑器所必需的。
  • 如果rerere无法干净地合并所有更改,此语句仍将返回错误状态并且不会提交合并。
  • 提交消息仍将包含冲突文件。
  • exit 1需要在里面$(),除非你想退出你的外壳。(猜猜我是怎么知道的。:-))
于 2014-12-16T20:47:02.513 回答