我正在尝试使用共享的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能够使用我以前的分辨率并且如果它们足够的话可以继续而不会失败?
答案 0 :(得分:10)
即使使用--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
需要在$()
内,除非您想退出shell(猜猜我是怎么知道的: - ))