
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?

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:
git config --global merge.tool kdiff3
git config --global mergetool.kdiff3.path "C:/Program Files/KDiff3/bin/kdiff3.exe"
git config --global mergetool.kdiff3.trustExitCode false
git config --global diff.guitool kdiff3
git config --global difftool.kdiff3.path "C:/Program Files/KDiff3/bin/kdiff3.exe"
git config --global difftool.kdiff3.trustExitCode false
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. Aus 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.

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):
[merge]
tool = kdiff3
[mergetool "kdiff3"]
path = C:/Program Files/KDiff3/kdiff3.exe
trustExitCode = false
[diff]
guitool = kdiff3
[difftool "kdiff3"]
path = C:/Program Files/KDiff3/kdiff3.exe
trustExitCode = false
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.)
git config --global --add merge.tool kdiff3
git config --global --add mergetool.kdiff3.path "/Applications/kdiff3.app/Contents/MacOS/kdiff3"
git config --global --add mergetool.kdiff3.trustExitCode false
git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "/Applications/kdiff3.app/Contents/MacOS/kdiff3"
git config --global --add difftool.kdiff3.trustExitCode false

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
.
git config --global merge.tool kdiff3
reicht.
Sehen Commit 47eb4c6 (07.06.2021) von Michael Schindler (michaelcompressconsult
).
(Zusammengeführt von Junio C. Hamano — gitster
— in b7bd70d begehen08.07.2021)
mergetools/kdiff3
: kdiff3 auch unter Windows zum Laufen bringen
Unterzeichnet von: Michael Schindler [email protected]
Der Einheimische kdiff3
mergetool
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.
Sehen c217b93 übergeben, begehen 57ba181, begehen 063f2bd (24.10.2018) von Denton Liu (Denton-L
).
(Zusammengeführt von Junio C. Hamano — gitster
— in Übertrage 87c15d130.10.2018)
mergetool
: annehmen -g/--[no-]gui
als Argumente
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.
[merge]
tool = kdiff3
[mergetool "kdiff3"]
cmd = /c/Progra~1/TortoiseHg/lib/kdiff3.exe $BASE $LOCAL $REMOTE -o $MERGED
Allerdings funktioniert es jetzt korrekt.
(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 rein stolpern, 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:
[merge]
renormalize = true
guitool = kdiff3
[diff]
tool = kdiff3
[difftool]
prompt = false
[difftool "kdiff3"]
# Unix style paths must be converted to windows path style
cmd = kdiff3.exe \"`wslpath -w $LOCAL`\" \"`wslpath -w $REMOTE`\"
trustExitCode = false
[mergetool]
keepBackup = false
prompt = false
[mergetool "kdiff3"]
path = kdiff3.exe
trustExitCode = false
Vor dem Windows-Update 1903
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
10180800cookie-checkWie kann ich KDiff3 als Merge-Tool und Diff-Tool für Git 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