2009-06-14 9 views
2

Leute, ich benutze ich internal: Merge Werkzeug, da ich kein großer Fan von GUI Diff Tools bin. Ich mag es wirklich und das einzige, was ich etwas verwirrend und nicht ganz praktisch finde, ist das Verhalten bei binären Dateikonflikten.Mercurial intern: Zusammenführung und binäre Dateikonflikte

Es kann nicht Binärdateien und Exits zusammenführen, die absolut korrekt ist. In dem Verzeichnis mit der in Konflikt stehenden Datei "foo" wird jedoch nur die Datei "foo.orig" erstellt.

Kann es zumindest "foo.other" auch so erstellen, dass ich wählen kann, welche Version der Datei (meine oder die gezogene) zu verwenden?

P.S. Ich fragte die gleiche Frage in Mercurial Mailing-Liste, aber niemand antwortete mir für mehrere Tage, vielleicht habe ich mehr Glück hier :)

Antwort

4

Sie haben bereits einige Eingaben zu Ihrer Frage on the Mercurial mailing list - Ich ging voran und versuchte, die Skript im Thread vorgeschlagen. Es ist eine lange Weile her, seit ich Subversion benutzt habe, aber ich denke, dass dieses einfache Skript funktioniert der Trick:

#!/bin/sh 
cp "$1" "$1.mine" 
cp "$2" "$1.base" 
cp "$3" "$1.other" 
false 

Der letzte false Befehl macht das Skript einen Nicht-Null-Exitcode, signalisiert, dass die Zusammenführung Mercurial gescheitert. Für Windows sieht es aus wie dieses (dank Pavel):

@copy %1 %1.mine 
@copy %2 %1.base 
@copy %3 %1.other 
exit 1 

ich die Unix-Version in ~/tmp/m.sh gespeichert und versucht, es mit keinem anderen merge Einstellungen konfiguriert als

[ui] 
merge = ~/tmp/m.sh 

ich ein Repository mit zwei Köpfen gemacht, jeweils mit einer widersprüchlichen Änderung zu einer JPEG-Datei (mg.jpg). Ich fügte auch eine nicht-widersprüchliche Änderung zu einer Textdatei hinzu (a.txt). Merging gab:

% hg --debug merge 
    searching for copies back to rev 1 
resolving manifests 
overwrite None partial False 
ancestor 0848c2f8f8f8 local 845b8aa076bd+ remote f611c55aa8ec 
mg.jpg: versions differ -> m 
a.txt: versions differ -> m 
preserving a.txt for resolve of a.txt 
preserving mg.jpg for resolve of mg.jpg 
picked tool '~/tmp/m.sh' for a.txt (binary False symlink False) 
merging a.txt 
my [email protected]+ other [email protected] ancestor [email protected] 
premerge successful 
picked tool '~/tmp/m.sh' for mg.jpg (binary True symlink False) 
merging mg.jpg 
my [email protected]+ other [email protected] ancestor [email protected] 
merging mg.jpg failed! 
0 files updated, 1 files merged, 0 files removed, 1 files unresolved 
use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon 

Das Schöne daran ist, dass die Pre-Merge a.txt selbst verschmelzen könnte und so keine a.txt.* Dateien wurden erstellt:

% hg stat 
M a.txt 
M mg.jpg 
? mg.jpg.base 
? mg.jpg.mine 
? mg.jpg.orig 
? mg.jpg.other 

Sie können sich wahrscheinlich Feinabstimmung dieses Skript weiter anpassen Ihre Bedürfnisse - wenn Sie dies tun, dann überlegen Sie, ob Sie die Informationen dem Mercurial-Wiki hinzufügen oder zumindest Ihren Fund auf der Mailing-Liste veröffentlichen.

+1

Es funktioniert gut, und hier ist die Windows-Version als auch (vergessen Sie nicht, es in eine .bat Skript zu setzen): @Copy% 1% 1.mine @Copy% 2% 1.Base @ Kopieren% 3% 1.andere exit 1 Das einzige, was ich ein wenig irreführend finde, ist die Benennung von Dateien. Es stellte sich heraus, dass ".other" tatsächlich ".mine" ist und umgekehrt :) Also würde ich dieses Skript wie folgt neu schreiben: @copy% 1% 1.other @copy% 2% 1. Basis @ Kopie% 3% 1.Mine Ausfahrt 1 – pachanga

+0

Hoppla, Stackoverflow verschraubt meine Einrückung :( – pachanga

+0

Meine Antwort ist hier - http://markmail.org/message/whucv2g2qmlagjv6 – pachanga

Verwandte Themen