Wie kann ich KDiff3 als Merge-Tool und Diff-Tool für Git konfigurieren?

Lesezeit: 8 Minuten

Benutzer-Avatar
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

Benutzer-Avatar
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.

  • 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

Benutzer-Avatar
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

  • @ 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.)

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

  • 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

Benutzer-Avatar
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.

Benutzer-Avatar
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.

Benutzer-Avatar
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:

  1. Fügen Sie das kdiff3-Installationsverzeichnis zum Windows-Pfad hinzu.
  2. 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.
  3. 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
  1. 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

1018080cookie-checkWie kann ich KDiff3 als Merge-Tool und Diff-Tool für Git konfigurieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy