Seit Git1.6.3 können Sie das Git-Difftool-Skript verwenden : siehe meine Antwort unten .
Vielleicht hilft Ihnen dieser Artikel . Hier sind die besten Teile:
Es gibt zwei verschiedene Möglichkeiten, ein externes Diff-Tool anzugeben.
Die erste ist die Methode, die Sie verwendet haben, indem Sie die Variable GIT_EXTERNAL_DIFF festgelegt haben. Die Variable soll jedoch auf den vollständigen Pfad der ausführbaren Datei verweisen. Darüber hinaus wird die von GIT_EXTERNAL_DIFF angegebene ausführbare Datei mit einem festen Satz von 7 Argumenten aufgerufen:
path old-file old-hex old-mode new-file new-hex new-mode
Da die meisten Diff-Tools eine andere Reihenfolge (und nur einige) der Argumente erfordern, müssen Sie höchstwahrscheinlich stattdessen ein Wrapper-Skript angeben, das wiederum das echte Diff-Tool aufruft.
Die zweite Methode, die ich bevorzuge, ist die Konfiguration des externen Diff-Tools über "git config" . Folgendes habe ich getan:
1) Erstellen Sie ein Wrapper-Skript "git-diff-wrapper.sh", das so etwas enthält
-->8-(snip)--
#!/bin/sh
# diff is called by git with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode
"<path_to_diff_executable>" "$2" "$5" | cat
--8<-(snap)--
Wie Sie sehen können, werden nur das zweite ("alte Datei") und das fünfte ("neue Datei") Argument an das Diff-Tool übergeben.
2) Typ
$ git config --global diff.external <path_to_wrapper_script>
Ersetzen Sie an der Eingabeaufforderung durch den Pfad zu "git-diff-wrapper.sh", damit Ihre ~ / .gitconfig enthält
-->8-(snip)--
[diff]
external = <path_to_wrapper_script>
--8<-(snap)--
Stellen Sie sicher, dass Sie die richtige Syntax verwenden, um die Pfade zum Wrapper-Skript und zum Diff-Tool anzugeben, dh verwenden Sie Schrägstriche anstelle von Schrägstrichen. In meinem Fall habe ich
[diff]
external = \"c:/Documents and Settings/sschuber/git-diff-wrapper.sh\"
in .gitconfig und
"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat
im Wrapper-Skript. Pass auf die nachlaufende "Katze" auf!
(Ich nehme an, das ' | cat
' wird nur für einige Programme benötigt, die möglicherweise keinen ordnungsgemäßen oder konsistenten Rückgabestatus zurückgeben. Möglicherweise möchten Sie es ohne die nachfolgende Katze versuchen, wenn Ihr Diff-Tool einen expliziten Rückgabestatus hat.)
( Diomidis Spinellis fügt in den Kommentaren hinzu :
Der cat
Befehl ist erforderlich, da er diff(1)
standardmäßig mit einem Fehlercode beendet wird, wenn sich die Dateien unterscheiden.
Git erwartet, dass das externe Diff-Programm nur dann mit einem Fehlercode beendet wird, wenn ein tatsächlicher Fehler aufgetreten ist, z. B. wenn nicht genügend Speicher vorhanden ist.
Durch Weiterleiten wird die Ausgabe git
an cat
den Fehlercode ungleich Null maskiert.
Effizienter könnte das Programm nur exit
mit einem Argument von 0 ausgeführt werden.)
Dies (der oben zitierte Artikel) ist die Theorie für ein externes Tool, die durch die Konfigurationsdatei (nicht durch die Umgebungsvariable) definiert wird.
In der Praxis (noch zur Definition der Konfigurationsdatei eines externen Tools) können Sie sich auf Folgendes beziehen: