Wenn Sie eine Zusammenführung mit Mercurial durchführen, möchten Sie widersprüchliche Dateien nacheinander zusammenführen, was bei großen Zusammenführungs-Sets kein produktiver Workflow ist. Stattdessen möchte ich die gesamten Changesets beider Köpfe zusammenführen (wie zB mit kdiff3 zu Diff 2 Heads). Für mich klingt das einfach, aber ich kann mir nicht vorstellen, wie ich es erreichen kann.
Bis jetzt ist das nächste, was ich erreichen kann, den Merge auf die übliche Weise zu durchlaufen, alle Konflikte ungelöst zu lassen (eine Datei zu einer Zeit ...), und dann hg vdiff -rHead1 -rHead2
- aber vdiff (mit kdiff3) doesn Es scheint keine Möglichkeiten zu geben, dem Tool ein Ausgabeverzeichnis (das aktuelle Arbeitsverzeichnis) zu übergeben und stattdessen mit dem Ausgabeverzeichnis als tempdir zu starten (möglicherweise ist -o die Antwort?).
Lassen Sie es mich anders ausdrücken - ich möchte mit kdiff zwei Köpfe in mein Arbeitsverzeichnis einfügen. Ich möchte, dass die Ergebnisse in meinem Arbeitsverzeichnis meine Zusammenführung sind, die ich übernehmen kann.
Ich muss etwas Offensichtliches vermissen, ich kann nicht der Einzige sein, der das will.
Ich habe eine Lösung gefunden, die das erreicht, was ich will, aber ich habe immer noch das Gefühl, dass es ein Kludscher ist.
hg update [My head's rev here]
hg --config "ui.merge=internal:fail" merge
Sehen Sie Ссылка nach, wie Details zusammengeführt / fehlgeschlagen werden.
Jetzt habe ich ein Arbeitsverzeichnis mit so viel wie Auto könnte herausfinden, aber alle ausstehenden Dateien noch unberührt von mir. (Verwenden Sie hg resolve -l, um den Auflösungsstatus der aktuellen Dateien von Mercurial anzuzeigen)
hg vdiff -r [Theirs head's rev here]
Hinweis: Wenn Sie WinMerge für Ihre vdiffs verwenden, stellen Sie sicher, dass es einen / r-Schalter als Option enthält, der einen Unterverzeichnisvergleich durchführt und - wenn WinMerge-Konfiguration für die Verwendung von Tree-View eingestellt ist - eine großartige Sache ist Baumvergleich. Von Mercurial.ini:
[extdiff]
cmd.vdiff = C:\Program Files\WinMerge\WinMergeU.exe
opts.vdiff = /e /ub /r /dl other /dr local
Jetzt kann ich das gesamte Verzeichnis bearbeiten, das die nicht aufgelösten Dateien enthält, und projektweite Änderungen nach Bedarf vornehmen (dh, das Auflösen einer Datei erfordert zusätzliche Änderungen in einer anderen Datei).
hg resolve -m
Puh! Hoffentlich hilft das jemand anderem!
Ich habe die Frage vor ein paar Tagen an #mercurial
auf irc.freenode.net weitergeleitet. mpm
(der Autor von Mercurial) gab eine Art Antwort (es war nur eine halbe Antwort, also habe ich es hier nicht sofort weitergegeben). Er sagte, dass man etwas tun könnte, bei dem Mercurial die Dateien automatisch zusammenführt (und die Zusammenführungsmarker <<<<
und >>>>
einfügen, wo es Konflikte gibt).
Verwenden Sie dann ein Merge-Tool, das diese Marker kennt: Dadurch können Sie alle auf einmal auflösen, anstatt es auf Dateibasis zu machen. Ein Ausgangspunkt wäre die Seite der Konfiguration des Mergingtools . Es erklärt das
%Vor% bewirkt, dass Mercurial die Merge-Marker einfügt. Hier habe ich es getestet, indem ich zwei Dateien x.txt
und y.txt
gemacht habe, die ich dann mit widersprüchlichen Änderungen in zwei Klonen modifiziert habe. Die Zusammenführung ergab einfach:
Alle Dateien wurden auf einmal verarbeitet, ich musste nichts pro Datei bestätigen, wie Sie es beschreiben.
Die Dateien enthalten jetzt Merge-Marker wie folgt:
%Vor%Der nächste Schritt besteht darin, ein Werkzeug zu finden, das einen Verzeichnisbaum mit solchen Dateien aufnehmen und Sie auflösen kann. Ich habe mir kdiff3 angeschaut, aber ich habe nicht herausgefunden, wie man es benutzt, um mit einer einzigen Datei zu arbeiten, es scheint sehr konzentriert zu sein, Paare von Dateien / Verzeichnissen zu vergleichen.
Ich bin mir nicht sicher, wie sehr dir diese halbe Antwort hilft - vielleicht bist du auch an diesem Punkt stecken geblieben? Aber ich hoffe, dass es anderen helfen kann, die die Zusammenführungsmarkierungen in alle Dateien eingefügt haben wollen, und dann die Konflikte von Hand lösen.
klingt wie der Befehl extdiff
:
Ich habe diese in meinem ~ / .hgrc (Ich bevorzuge eine Meldung, aber Sie können es in kdiff3 ändern, usw.)
%Vor% Mit extdiff
treten Ihre Zusammenführungen in Ihrem Arbeitsverzeichnis auf, und Sie können darüber hinaus beliebige zusätzliche Parameter an Ihr Diff-Programm übergeben mit -o:
hg extdiff [OPT] ... [DATEI] ...
Verwenden Sie ein externes Programm zum Vergleichen Repository (oder ausgewählte Dateien)
%Vor%Optionen:
-p - Programmvergleichsprogramm zum Ausführen von
-o --option pass Option zum Vergleichsprogramm
-r --rev Revision
-I - include Namen, die den angegebenen Mustern entsprechen -X - Ausschließen von Namen, die den angegebenen Mustern entsprechen
Versuchen Sie, ui.merge einzustellen. Weitere Informationen finden Sie auf dieser Seite .