2013-08-01 68 views
12

我試圖使用共享rerere緩存來自動化一次性集成/測試分支。git rerere不會自動提交autoupdated合併解決方案

這個想法是,當分支被推送時,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,然後繼續,但是我的集成測試構建腳本發現錯誤。我已經嘗試在git merge命令中添加--rerere-autoupdate,但沒有任何更改。我已經配置回購啓用和自動應用rerere匹配。

我該如何讓git merge使用我以前的解決方案,如果足夠的話,可以繼續而不會失敗?

+0

情況Git 2.14.x/2.15(2017年第3季度)應該會很快改進:https://stackoverflow.com/a/45988818/6309 – VonC

回答

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(猜我是怎麼知道這個:-))
+1

感謝您抽出時間。我一直生活在這個缺點很久,它已成爲我舞蹈的一部分..... – Campbell

+0

避免'$(exit 1)'的常用方法是使用標準的UNIX'false'(或'true')命令 – sehe