Git: Wie kann ich KDiff3 als Merge-Tool und Diff-Tool konfigurieren?
Lesezeit: 8 Minuten
José Miguel Rodríguez García
Kürzlich habe ich GitExtension 2.46 verwendet, aber die Git-Version, die dasselbe hat, ist 1.9.4.msysgit.2. Da ich bereit war, nur Git-Befehle zu verwenden, habe ich GitExtension deinstalliert und die neueste verfügbare Version installiert Git und KDiff3.
Wenn ich eine Zusammenführung durchführe und Konflikte habe, führe ich den folgenden Befehl aus:
git mergetool
Dann erhalte ich die Meldung:
Das Zusammenführungstool kdiff3 ist nicht als ‘kdiff3’ verfügbar.
Ich denke, es muss am KDiff3-Pfad liegen.
Umfeld
Betriebssystem: Windows 10
Git 2.6.1.windows.1
KDiff3 0.9.98 (64 Bit)
Fragen:
Was muss ich in der .gitconfig-Datei für den Befehl konfigurieren git mergetool um die KDiff3-GUI mit den Versionen zu öffnen LOKAL, FERNBEDIENUNG, BASE und ZUSAMMENGEFÜHRT der widersprüchlichen Datei?
Wie kann ich es konfigurieren, um es als Diff-Tool zu verwenden?
Verwandter Beitrag – So konfigurieren Sie ein Diff-Tool in Git im Allgemeinen.
– RBT
5. April 2018 um 23:47 Uhr
Mit Git 2.33+ (Q3 2021), git config --global merge.tool kdiff3 wird genug sein. Siehe meine aktualisierte Antwort unten
– VonC
9. Juli 2021 um 20:38 Uhr
José Miguel Rodríguez García
Diese Seiten waren sehr hilfreich, fast, Zusammenführungstool und difftool. Ich habe die globale Konfiguration verwendet, kann aber problemlos vom Repository verwendet werden. Sie müssen nur die folgenden Befehle ausführen:
Beachten Sie, dass die neueste Version kdiff3 die ausführbare Datei aus dem Stammverzeichnis des Anwendungsordners C:/Programme/KDiff3 in den Ordner bin/ innerhalb des Anwendungsordners verschoben hat. Wenn Sie eine ältere Version verwenden, entfernen Sie „bin/“ aus den obigen Pfaden.
Die Verwendung der trustExitCode Die Option hängt davon ab, was Sie tun möchten, wenn das Diff-Tool zurückkehrt. Von Dokumentation:
git-difftool ruft für jede Datei einzeln ein Diff-Tool auf. Vom Diff-Tool gemeldete Fehler werden standardmäßig ignoriert. Verwenden –trust-exit-code zu machen git-difftool exit, wenn ein aufgerufenes Diff-Tool einen Exit-Code ungleich Null zurückgibt.
Warum sollte ich dennoch wollen, dass git-difftool nicht beendet wird, wenn kdiff3 fehlschlägt?
– David Torres
16. Februar 2017 um 16:21 Uhr
Damit das Diff-Tool von Visual Studio 2015 erkannt wird, musste ich diese Zeile ändern git config --global --add diff.guitool kdiff3 dazu: git config --global --add diff.tool kdiff3
– Guillaume Raymond
11. April 2017 um 2:42 Uhr
@DavidTorres Wahrscheinlich, weil schlecht benommene Windows-Tools (die bei Erfolg mit Nicht-Null-Codes beendet werden) es für alle ruinieren.
– Matthäus Flaschen
27. Juni 2017 um 17:47 Uhr
SO VIEL ICH WEISS, --add fügt bei mehrmaligem Aufruf einen zweiten oder dritten Eintrag hinzu. Das ist später schwer zu beheben, weil es nicht einfach mit entfernt werden kann --remove. Setzen Sie einfach einen Wert ohne --add sollte in Ordnung sein.
– Thomas Weller
6. März 2018 um 13:48 Uhr
Guter Punkt @ThomasWeller, die Antwort wurde aktualisiert, um Ihren Vorschlag widerzuspiegeln
– José Miguel Rodríguez García
14. Februar 2020 um 16:38 Uhr
Igor Kustow
Nur um die Antwort von @ Joseph zu erweitern:
Nachdem Sie diese Befehle angewendet haben, wird Ihre globale .gitconfig Datei enthält die folgenden Zeilen (um den Vorgang zu beschleunigen, können Sie sie einfach in die Datei kopieren):
@ Alex78191, meine Antwort spiegelt die Antwort von Joseph wider und dort finden Sie weitere Details zu dieser Einstellung.
– Igor Kustow
7. Mai 2017 um 17:19 Uhr
Ich habe lange gebraucht, um das richtig hinzubekommen. 2 Dinge haben mich in die Irre geführt: (1) Die .gitconfig Datei, die ich bearbeitet habe, war nicht der benutzt wird. Siehe stackoverflow.com/questions/2114111/… zur Identifizierung der geladenen. (2) Nicht mischen und anpassen cmd = und path = in gitconfig, TL; DR: cmd löschen und nur den Pfad verwenden
– Matter Wilkie
26. Oktober 2017 um 18:47 Uhr
Verwenden Sie jetzt auf git bash …. git difftool oder einfach git difftool, um die Diff-GUI kdiff3 auszuführen, die Sie gerade festgelegt haben.
– Vivek
8. Januar 2018 um 16:13 Uhr
Fügen Sie für Visual Studio auch Folgendes hinzu:[diff] tool = kdiff3
– Wolodymyr Kotylo
10. September 2021 um 8:16 Uhr
Für Mac-Benutzer
Hier ist die akzeptierte Antwort von @ Joseph, jedoch mit dem standardmäßigen Mac-Installationspfad von kdiff3
(Beachten Sie, dass Sie dies kopieren und einfügen und auf einmal ausführen können.)
Nicht verwenden --add da dies zu 2 Konfigurationseinträgen führen kann, wenn Sie den Befehl zweimal ausführen. Es ist eine Sauerei, das aufzuräumen, weil Sie keinen einzigen Eintrag mehr löschen können. Sehen git-scm.com/docs/git-config: “Einer Option können mehrere Zeilen hinzugefügt werden”
– Thomas Weller
27. März 2019 um 10:27 Uhr
Benutzer3159253
Nun, das Problem ist, dass Git KDiff3 nicht im %PATH% finden kann.
In einer typischen Unix-Installation befinden sich alle ausführbaren Dateien an mehreren bekannten Orten (/bin/, /usr/bin/, /usr/local/bin/usw.), und man kann ein Programm aufrufen, indem man einfach seinen Namen in einen Shell-Prozessor eingibt (z cmd.exe 🙂 ).
In Microsoft Windows werden Programme normalerweise in dedizierten Pfaden installiert, sodass Sie nicht einfach tippen können kdiff3 in einem cmd Sitzung und bringen Sie KDiff3 zum Laufen.
Die schwierige Lösung: Sie sollten Git mitteilen, wo KDiff3 zu finden ist, indem Sie den vollständigen Pfad angeben kdiff3.exe. Leider mag Git keine Leerzeichen in der Pfadangabe in seiner Konfiguration, also landete ich das letzte Mal, als ich das brauchte, bei diesem alten “C:\Progra~1…\kdiff3.exe”, als ob es spät wäre 1990er 🙂
Die einfache Lösung: Bearbeiten Sie Ihre Computereinstellungen und binden Sie das Verzeichnis mit kdiff3.exe in %PATH% ein. Testen Sie dann, ob Sie es über den Namen von cmd.exe aufrufen können, und führen Sie dann Git aus.
VonC
Aktualisierung 2021:
Mit Git 2.33 (Q3 2021) unter Windows mergetool wurde gelehrt, zu finden kdiff3.exe so wie es findet winmerge.exe.
Der Einheimische kdiff3mergetool wird nicht gefunden von git mergetool(Mann) unter Windows.
Die Nachricht “The merge tool kdiff3 is not available as 'kdiff3'” wird angezeigt.
So wie wir den Namen der Binärdatei übersetzen und im Suchpfad für WinMerge danach suchen, tun Sie dasselbe für kdiff3, um es zu finden.
2018:
Um die Antwort von kris zu ändern, beginnend mit Git 2.20 (Q4 2018), der richtige Befehl für git mergetool wird sein
git config --global merge.guitool kdiff3
Das ist, weil “git mergetool” gelernt zu nehmen “--[no-]gui” Option, genau wie “git difftool” tut.
Im Einklang mit wie difftool akzeptiert a -g/--[no-]gui Möglichkeit, machen mergetool Akzeptieren Sie dieselbe Option, um die zu verwenden merge.guitool Variable, um stattdessen das Standard-Mergetool zu finden merge.tool.
Peter Mortensen
Ich musste die Befehlszeilenparameter hinzufügen oder KDiff3 würde nur ohne Dateien öffnen und mich nach base, local und remote fragen. Ich habe die mitgelieferte Version verwendet SchildkröteHg.
Außerdem musste ich auf die guten alten Dateinamen von DOS 8.3 zurückgreifen.
(Als ich versuchte, herauszufinden, wie man kdiff3 von WSL git verwendet, bin ich hier gelandet und habe die letzten Teile bekommen, also werde ich meine Lösung für alle anderen posten, die auch hier reinstolpern, während sie versuchen, diese Antwort zu finden.)
So verwenden Sie kdiff3 als Diff/Merge-Tool für WSL-Git
Mit Windows Update 1903 ist es viel einfacher; Verwenden Sie einfach wslpath und es besteht keine Notwendigkeit, TMP von Windows für WSL freizugeben, da die Windows-Seite jetzt über \wsl$ Zugriff auf das WSL-Dateisystem hat:
Schritte zur Verwendung von kdiff3, das unter Windows 10 installiert ist, als Diff/Merge-Tool für Git in WSL:
Fügen Sie das kdiff3-Installationsverzeichnis zum Windows-Pfad hinzu.
Fügen Sie TMP zur Windows-Umgebungsvariable WSLENV hinzu (WSLENV=TMP/up). Das TMP-Verzeichnis wird von Git für temporäre Dateien verwendet, wie frühere Revisionen von Dateien, daher muss sich der Pfad im Windows-Dateisystem befinden, damit dies funktioniert.
Setzen Sie TMPDIR in .bashrc auf TMP:
# If TMP is passed via WSLENV then use it as TMPDIR
[[ ! -z "$WSLENV" && ! -z "$TMP" ]] && export TMPDIR=$TMP
Unix-Pfad in Windows-Pfad umwandeln, wenn kdiff3 aufgerufen wird. Beispiel meiner .gitconfig:
[merge]
renormalize = true
guitool = kdiff3
[diff]
tool = kdiff3
[difftool]
prompt = false
[difftool "kdiff3"]
#path = kdiff3.exe
# Unix style paths must be converted to windows path style by changing '/mnt/c/' or '/c/' to 'c:/'
cmd = kdiff3.exe \"`echo $LOCAL | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\" \"`echo $REMOTE | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\"
trustExitCode = false
[mergetool]
keepBackup = false
prompt = false
[mergetool "kdiff3"]
path = kdiff3.exe
trustExitCode = false
9163000cookie-checkGit: Wie kann ich KDiff3 als Merge-Tool und Diff-Tool konfigurieren?yes
Verwandter Beitrag – So konfigurieren Sie ein Diff-Tool in Git im Allgemeinen.
– RBT
5. April 2018 um 23:47 Uhr
Mit Git 2.33+ (Q3 2021),
git config --global merge.tool kdiff3
wird genug sein. Siehe meine aktualisierte Antwort unten– VonC
9. Juli 2021 um 20:38 Uhr