2013-08-01 4 views
12

Ich versuche, den geteilten Rerere-Cache zu verwenden, um Wegwerf-Integration/Test-Zweige zu automatisieren.git rerere auto-put failed autoupdated merge-auflösungen

Die Idee ist, dass der Rerere-Cache auf dem neuesten Stand sein sollte, wenn der Zweig geschoben wird, so dass diese Zusammenführungen immer passieren. Sie sind jedoch nicht:

>>> 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. 

An diesem Punkt hat rerere die Beschlüsse inszeniert, dass es in Erinnerung, und kein tatsächlicher Konflikt besteht. Ich kann git commit laufen, dann weiter, aber meine Integration-Test-Build-Skript sieht einen Fehler. Ich habe versucht, --rerere-autoupdate zu dem Befehl git merge hinzuzufügen, aber nichts ändert sich. Ich habe das Repo konfiguriert, um rerere Matches zu aktivieren und automatisch anzuwenden.

Wie kann ich Git Merge bitten, meine vorherigen Auflösungen zu verwenden und ohne Fehler fortzufahren, wenn sie ausreichen?

+0

Die Situation sollte sich bald mit Git 2.14.x/2.15 (Q3 2017) verbessern: https://stackoverflow.com/a/45988818/6309 – VonC

Antwort

10

Selbst mit dem --rerere-autoupdate Flag scheint git merge zu zögern, die Zusammenführung ohne irgendeine menschliche Eingabe automatisch abzuschließen. Wenn dies der Fall ist, wird es mit einem Fehlerstatus ausgeführt, und Ihr Integrationstool verweigert die Ausführung.

Ich weiß nicht, wie Ihre automatische Zusammenführung geschieht, nämlich, wenn Sie den Git-Befehl ändern können, der ausgeführt wird. Wenn Sie können, können Sie die folgenden Befehle ausführen.

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 Liste Dateien, die nach rerere
  • --no-edit notwendig werden müssen gelöst ist zu verhindern, dass die Nachrichten-Editor
  • Bei rerere war sauber nicht in der Lage zu begehen öffnen, um alle Änderungen dieser Aussage zu fusionieren noch wird Wird mit einem Fehlerstatus ausgeführt und die Zusammenführung wird nicht ausgeführt.
    • Die Commit-Nachricht noch die widerstreitenden Dateien
  • exit 1 Bedürfnisse innerhalb $() sein enthalten, wenn Sie Ihre Shell verlassen wollen (erraten, wie ich diese :-) wissen)
+1

Danke, dass du dir die Zeit genommen hast. Ich habe so lange mit diesem Mangel gelebt, dass es Teil meines Tanzes geworden ist. – Campbell

+0

Der übliche Weg, '$ (exit 1) zu vermeiden, ist die Verwendung des Standard UNIX' false' (oder 'true') Befehle – sehe