Verwendung von WinMerge als Diff-Tool für Mercurial

19

Ich verwende das verteilte Mercurial-Versionskontrollsystem und frage mich, wie ich es so konfigurieren kann, dass WinMerge anstelle seines eigenen internen Diff-Tools verwendet wird. Ich habe bereits WinMerge als Merge-Tool, möchte jedoch, dass Mercurial WinMerge verwendet, wenn ich Folgendes tippe:

hg diff

Gibt es eine Möglichkeit, das zu tun, oder stecke ich mit Mercurials internem Diff-Tool fest?

Quantikel
quelle

Antworten:

24

Aus der TortoiseHg FAQ :

Fügen Sie diese Zeilen zu Ihrer persönlichen Mercurial.ini-Datei hinzu

[Erweiterungen]
extdiff =

[extdiff]
cmd.winmerge = C: \ Programme \ WinMerge \ WinMergeU.exe
opts.winmerge = / e / x / u / wl

Führen Sie nun das Global Settings Tool aus. Auf der Registerkarte TortoiseHg sollte Winmerge in der Dropdown-Liste für Visual Diff Command verfügbar sein. Wählen Sie winmerge aus, wenden Sie an und schließen Sie dann.

Dieselbe Methode kann verwendet werden, um nahezu jedes visuelle Diff-Tool hinzuzufügen. Beachten Sie jedoch, dass Ihr Diff-Tool Verzeichnis-Diffs unterstützen muss, wenn es von TortoiseHg verwendet werden soll, es sei denn, Sie verwenden Version 0.8 oder höher.

Joel stellte auch eine Lösung hier , falls Sie Mercurial unter Cygwin laufen.

Erklärung der WinMerge-Befehlszeilenargumente hier . Zusammenfassung:

  • /e Mit dieser Option können Sie WinMerge mit einem einzigen Tastendruck schließen
  • /x Schließt WinMerge (nach dem Anzeigen eines Informationsdialogs), wenn Sie einen Vergleich identischer Dateien starten
  • /u verhindert, dass WinMerge der Liste "Zuletzt verwendet" (MRU) einen der Pfade (links oder rechts) hinzufügt
  • /wl Öffnet die linke Seite als schreibgeschützt
cschol
quelle
Ich verwende TortoiseHG nicht und ich verwende Mercurial auch nicht unter Cygwin. Ich verwende das Standardbefehlszeilen-Mercurial-Installationsprogramm von mercurial.berkwood.com . Ihre Lösung hat funktioniert, in dem Sinne, dass ich "hg winmerge <file>" eingeben kann, um den Unterschied zur vorherigen Version zu sehen, aber "hg diff <file>" bringt immer noch den gleichen (ziemlich hässlichen) Unterschied hervor Werkzeug. Trotzdem ist es besser als nichts.
Quanticle
In dieser Antwort wird davon ausgegangen, dass Sie Mercurial.ini im TortoiseHg-Verzeichnis bearbeiten (z. B. C: \ Programme \ TortoiseHg). Wenn Sie das im Mercurial-Verzeichnis bearbeiten (z. B. C: \ Programme \ Mercurial), funktioniert dies nicht (zumindest bei mir nicht).
Ashley Davis
auch c: \ Programme (x86) \ WinMerge \ WinMergeU.exe
Avram
Stellen Sie sicher, dass Sie in der Konfigurationsdatei keine Anführungszeichen um den Pfad zu WinMerge setzen, da dies sonst nicht funktioniert.
Drealmer
7

So funktioniert es für mich - eine reine Quecksilber-Befehlszeile, die kein Schildpatt ist

Bearbeiten Sie zuerst die Datei (unter einem 64-Bit-Fenster)

C: \ Programme (x86) \ Mercurial \ Mercurial.ini

[extensions]
; must uncomment this line
extdiff =

[extdiff]
; i'm using winmerge unicode version
cmd.winmerge = C:\Program Files (x86)\WinMerge\WinMergeU.exe
; it explains winmerge command line parameters here: http://winmerge.org/docs/manual/CommandLine.html
opts.winmerge = /r /e /x /u /wl

Dann können Sie "hg winmerge ..." anstelle von "hg diff ..." verwenden.

Renfeng
quelle
Ich finde es nützlich, winmerge im Hintergrund auszuführen, damit ich die Änderungen beim Festlegen der Festschreibungsmeldung überprüfen und Statistiken zu den geänderten Dateien in der Befehlszeile anzeigen kann. Um dies zu tun eine Batch - Datei in dem Quecksilber-Verzeichnis abgelegt , die beginnen enthalten / b hg winmerge <NEWLINE> hg diff --stat
danio
3

Nun, die zuvor gegebenen Antworten geben mir nicht die gewünschten Effekte. Sie erlauben es nicht, Revisionen zu verändern und an Ort und Stelle zu bearbeiten (ich meine die gleiche Funktionalität, die für TortoiseSVN aus der Box verfügbar ist). Dazu habe ich zusätzlich zu mercurial.ini diesen Abschnitt hinzugefügt:

[merge-tools]
winmerge.regkey=Software\Thingamahoochie\WinMerge\
winmerge.regname=Executable
winmerge.priority=-10
winmerge.args=/e /x /wl /ub /dl other /dr local $other $local $output
winmerge.fixeol=True
winmerge.checkchanged=True
winmerge.gui=True
winmerge.diffargs=/r /e /x /ub /wl /dl '$plabel1' /dr '$clabel' $parent $child
winmerge.diff3args=
winmerge.dirdiff=True

Dies ist http://blog.stevehorn.cc/blog/easy-mercurial-visual-diff-between-two.html entnommen

Alehro
quelle