Wie kann ich eine Changeset-basierte Zusammenführung anstelle einer dateiweisen Zusammenführung mit Mercurial durchführen?

8

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.

    
jsaylor 29.04.2009, 22:04
quelle

5 Antworten

4

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.

  • Beginne mit einem leeren Arbeitsverzeichnis mit 2 Köpfen: Mein und ihr.
  • Arbeitsverzeichnis zu Mine aktualisieren:
    hg update [My head's rev here]
  • Führen Sie eine Zusammenführung durch, aber scheitern Sie alle Dateien, die Merc nicht automatisch verarbeiten kann, ohne ein Zusammenführungstool zu starten und "Meine" Dateien im Konflikt zu behalten:
    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)

  • Jetzt kann ich mein Arbeitsverzeichnis gegen den Kopf von Deir vdiffen, was mir den High-Level-Changeset-zu-Changeset-Merge gibt, nach dem ich gesucht habe.

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

  • Wenn Sie fertig sind, verwenden Sie resolve, um alle für Merc gelösten Dateien zu markieren und dann zu committen.
    hg resolve -m

Puh! Hoffentlich hilft das jemand anderem!

    
jsaylor 17.06.2009 13:13
quelle
3

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:

%Vor%

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.

    
Martin Geisler 03.06.2009 09:41
quelle
1

Ich denke das beantwortet Ihre Frage.

    
Jim Hunziker 03.06.2009 00:58
quelle
0

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:

%Vor%
  

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

    
Paul Ivanov 09.06.2009 08:45
quelle
0

Versuchen Sie, ui.merge einzustellen. Weitere Informationen finden Sie auf dieser Seite .

    
Nathan Kitchen 29.04.2009 22:43
quelle

Tags und Links