2012-04-04 5 views
1

Betrachten Sie ein Hg-Projekt mit zwei zentralen Zweigen/Klonen - z.B. DEV und PRD. Wenn jemand einen Hotfix an PRD sendet, geht ein automatisiertes Skript auf dem zentralen Server zu DEV und zieht die neuen Änderungen. Es versucht dann, den Hotfix in DEV zusammenzuführen.hg automatische Verschmelzungen mit diff3

Das Problem ist, dass das in Hg integrierte Merge-Tool schrecklich ist - sobald es parallele Änderungen an der gleichen Datei gibt, wird es fehlschlagen. Nehmen Sie das folgende Beispiel:

parent:3,7c 
four 
five 
six 

seven 

child1:3,7c 
four 
five5 
six6 

seven7 

child2:3,7c 
fourmore 
five 
six 
more 
seven 

Wie Sie sehen können, gibt es hier keine tatsächlichen Konflikte. Wenn wir die Zusammenführung lokal mit kdiff durchführen, löst es diesen einfachen Fall ohne Benutzereingaben!

Ich möchte einen Weg, um den zentralen Server, um diese Fälle zu verwalten. Ich dachte daran, kdiff3 im Silent-Modus zu verwenden, aber ich kann kdiff3 nicht darauf installieren (es ist nur ein CLI-System, auf das wir nicht einmal Administratorzugriff haben), aber vielleicht gibt es eine Möglichkeit, diff3 in hg merge zu stecken Kann so einfache Fälle lösen? Ich habe versucht, "[ui]/n merge = diff3" in der hgrc, aber es spuckt nur die drei Versionen zu stdout aus. Fehle ich etwas zusätzliche Konfiguration? Oder gibt es ein einfacheres/besseres Werkzeug?

Vielen Dank

Antwort

1

Um diff3 als Merge-Tool zu verwenden, müssen Sie

[merge-tools] 
diff3.args = $local $base $other -m > $output 

zu der Konfigurationsdatei hinzuzufügen. Sie können die Priorität bei Bedarf festlegen, siehe the wiki. Sie finden auch kompliziertere recipes for using diff3 there.

Allerdings habe ich getestet, wie diff3 behandelt Ihr Szenario mit Änderungen in benachbarten Zeilen, und genau wie Mercurial, weigerte es sich auch, dies sauber zu verschmelzen. Verschiedene Merge-Tools haben unterschiedliche Schwellenwerte für das, was sie als "Konflikt" betrachten, und es scheint, dass KDiff3 fehlerverzeihender ist als Mercurial und diff3.

Ich schlage vor, dass Sie den Entwickler, der den Hotfix auf PRD macht für die Verschmelzung in DEV lokal verantwortlich machen, wo er Zugriff auf Tools wie KDiff3 hat. Das automatische Zusammenführen auf einem Server wird im Allgemeinen als schlecht angesehen. Zusammenführungen sollten nur ein wenig von einem Menschen verifiziert werden, bevor Sie sie ausführen. Es ist nicht viel zusätzliche Arbeit nach dem Hotfix.

Verwandte Themen