it-swarm.com.de

Wie konfiguriere ich kdiff3 anstatt als Git-Mergetool aufzutauchen?

Ich habe Git auf Mac OSX Snow Leopard und habe versucht, mein Merge- und Diff-Tool so zu bearbeiten, dass kdiff3 anstelle von emerge verwendet wird.

Aber wenn ich versuche, es zu verwenden, startet die GUI von kdiff nicht und hält mich mit einer cmd-basierten Schnittstelle.

Meine Einstellungen in gitconfig sind:

[merge]
     tool = kdiff3
[mergetool "kdiff3"]
    cmd = /Applications/kdiff3.app/Contents/MacOS/kdiff3
    args = $base $local $other -o $output
    trustExitCode = false
[diff]
tool = kdiff3
[difftool "kdiff3"]
cmd = /Applications/kdiff3.app/Contents/MacOS/kdiff3
args = $base $local $other -o $output
trustExitCode = false

Es fehlt offensichtlich etwas, aber was habe ich falsch gemacht?

52
AKFourSeven

Die neuesten Git-Versionen unterstützen kdiff3. Sie müssen es also nicht manuell mit den allgemeinen Einstellungen cmd und args konfigurieren. Mach stattdessen:

$ git config --global merge.tool kdiff3

Und wenn kdiff3 Nicht in Ihrem [~ # ~] Pfad ist [~ # ~] Umfeld, machen Sie auch:

$ git config --global mergetool.kdiff3.path /Applications/kdiff3.app/Contents/MacOS/kdiff3

Dadurch startet git mergetoolkdiff3. Beachten Sie, dass es gibt keine Möglichkeit Git so zu konfigurieren, dass automatisch Ihr Merge-Tool nach einer manuellen Zusammenführung mit Konflikten startet.

Wenn Sie wirklich sehen möchten, wie Git intern kdiff3 Aufruft, schauen Sie sich die eingebaute mergetool-Konfiguration für kdiff an.

Bearbeiten : Für Beyond Compare 4 , das jetzt auch Mac OS X unterstützt, tauschen Sie einfach kdiff3 Mit bc3 (Ja, "3") und passen Sie den Pfad in den obigen Zeilen an. Ab Git 2.2.0 können Sie bc als Alias ​​für bc3 Verwenden, damit Sie sich nicht um die Versionsnummer kümmern müssen.

135
sschuberth

Aktuelle Git-Versionen unterstützen kdiff3

Ja, aber nur mit Git 2.12 (Q1 2017) können diese integrierten Tools ihrem Exit-Code vertrauen.

Siehe Festschreiben 2967284 , Festschreiben 7c10605 (29. November 2016) von David Aguilar (davvid .
(Zusammengeführt von Junio ​​C Hamano - gitster - in Festschreiben von c4a44e2 , 16. Dezember 2016)

mergetool: Ehre mergetool.$tool.trustExitCode für eingebaute Werkzeuge

Integrierte Merge-Tools enthalten eine fest codierte Annahme, ob der Exit-Code eines Tools als vertrauenswürdig eingestuft werden kann, um den Erfolg oder Misserfolg einer Zusammenführung festzustellen.
Tools, deren Exit-Codes nicht vertrauenswürdig sind, enthalten Aufrufe von check_unchanged() in ihren merge_cmd() -Funktionen.

Ein Problem dabei ist, dass die trustExitCode-Konfiguration für integrierte Tools nicht berücksichtigt wird.

Lehren Sie integrierte Tools, um die trustExitCode -Konfiguration zu berücksichtigen.

(Siehe kdiff3 )

Erweitern Sie run_merge_cmd() so, dass es für den Aufruf von check_unchanged() verantwortlich ist, wenn der Exit-Code eines Tools nicht als vertrauenswürdig eingestuft werden kann.
Entfernen Sie check_unchanged() Aufrufe von Scriptlets, da diese nicht mehr für den Aufruf verantwortlich sind.

1
VonC