Wenn Mercurial unter cygwin läuft, ist es ein bisschen schwierig herauszufinden, wie man WinMerge spawnen kann, um Zusammenführungskonflikte zu lösen. Wie kann ich das machen?Wie kann ich Mercurial für die Verwendung von WinMerge für Zusammenführungen unter Cygwin konfigurieren?
Antwort
Der Trick ist, dass Cygwin-Pfade nicht mit Windows-Pfaden identisch sind. Daher benötigen Sie ein kleines Skript, das die Cygwin-Pfade in Windows-Pfade konvertiert, bevor sie als Argumente an WinMerge übergeben werden.
Hier ist, wie es zu tun:
(1) ein Shell-Skript in /usr/bin/winmerge
erstellen wie folgt:
#!/bin/sh
"/cygdrive/c/Program Files/WinMerge/WinMergeU.EXE" /e /ub /dl other /dr local `cygpath -aw $1` `cygpath -aw $2` `cygpath -aw $3`
Hinweis: cygpath
Pfadnamen konvertiert. Wenn sich WinMerge nicht am Standardspeicherort befindet, ändern Sie den Pfad hier. Machen
(2), die eine ausführbare Datei
chmod +x /usr/bin/winmerge
(3) Fügen Sie folgendes zu Ihrem ~/.hgrc
Datei:
[ui]
merge = winmerge
[merge-tools]
winmergeu.executable=/usr/bin/winmerge
winmergeu.args=$other $local $output
winmergeu.fixeol=True
winmergeu.checkchanged=True
winmergeu.gui=False
Hinweis! Du hast wahrscheinlich bereits eine [ui] -Sektion mit deinem Namen darin. Denken Sie daran, meine Änderungen mit Ihren zusammenzuführen, fügen Sie nicht einfach einen neuen Abschnitt [ui] hinzu. Zum Beispiel sieht mein .hgrc wie folgt aus:
[ui]
username = Joel Spolsky <[email protected]>
merge = winmergeu
[extensions]
fetch =
[merge-tools]
winmergeu.executable=/usr/bin/winmerge
winmergeu.args=$other $local $output
winmergeu.fixeol=True
winmergeu.checkchanged=True
winmergeu.gui=False
Hier ist die Shell-Skript Zeile, die für Subversion/Cygwin/WinMerge funktioniert. Der Hauptunterschied besteht darin, welche Argumente zu verwenden sind.
/cygdrive/c/Program\ Files/WinMerge/WinMergeU.exe /e /ub /dl "$3" /dr "$5" "`cygpath -aw $6`" "`cygpath -aw $7`" &
Beachten Sie, dass dieses Beispiel auch die Beschreibungsfelder setzt und startet die Vergleiche im Hintergrund, so dass alle diffs sofort gestartet werden. Wenn Ihnen das nicht gefällt, entfernen Sie die "&".
Wenn Sie nicht wissen, was Ihr Versionskontrollprogramm an Sie weitergibt, fügen Sie Ihrem Shell-Skript 'echo $ @' hinzu. Es werden die an das Skript übergebenen Argumente gedruckt.
Sie können jetzt Ihre eigene Antwort akzeptieren, richtig? –
Ich muss 48 Stunden warten. –
Ich würde dieses Skript wahrscheinlich nicht in/usr/bin/einfügen. Ich wollte hinter dir her, dass du Cygpath nicht benutzt hast, aber dann habe ich den Codeblock gescrollt und gesehen, was du machst. –