829 Stimmen

Wie kann ich die "git diff"-Ausgabe mit meinem bevorzugten Diff-Tool/Viewer anzeigen?

Wenn ich tippe git diff Ich möchte die Ausgabe mit dem visuellen Diff-Tool meiner Wahl (SourceGear "diffmerge" unter Windows) anzeigen. Wie konfiguriere ich Git für diese Aufgabe?

120 Stimmen

In allen neueren Versionen von git können Sie "git difftool" statt "git diff" verwenden. Damit wird ein visuelles Diff-Programm geöffnet.

0 Stimmen

Bezüglich des neuen Skripts difftool habe ich unten eine Antwort hinzugefügt: stackoverflow.com/questions/255202/

2 Stimmen

Gitx - gitx.frim.nl . Das war's.

28voto

Kem Mason Punkte 1157

Ich habe eine Ergänzung dazu. Ich verwende regelmäßig eine Diff-App, die nicht als eines der Standardwerkzeuge unterstützt wird (z. B. Kaleidoskop), über

git difftool -t

Ich möchte auch die Standardeinstellung diff einfach die normale Befehlszeile sein, so dass das Setzen der GIT_EXTERNAL_DIFF Variable ist keine Option.

Sie können eine beliebige diff App einmalig mit diesem Befehl:

git difftool --extcmd=/usr/bin/ksdiff

Es übergibt einfach die 2 Dateien an den von Ihnen angegebenen Befehl, so dass Sie wahrscheinlich auch keinen Wrapper benötigen.

2 Stimmen

Gutes Argument: Niemand hat bisher erwähnt, dass --extcmd Option. +1. Ich habe sie in meine Antwort aufgenommen.

0 Stimmen

Können Sie einen Hinweis auf "Kaleidoskop" hinzufügen?

24voto

David Marble Punkte 1751

Aufbauend auf VonCs Antwort für das Entfernen und Hinzufügen von Dateien die folgenden Befehle und Skripte verwenden:

git config --global diff.tool winmerge
git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\" \"$BASE\""
git config --global difftool.prompt false

Das ist dasselbe, als wenn Sie in Ihre globale Datei Folgendes eingeben .gitconfig :

[diff]
    tool = winmerge
[difftool "winmerge"]
    cmd = winmerge.bat "$LOCAL" "$REMOTE" "$BASE"
[difftool]
    prompt = false

Dann fügen Sie Folgendes in die Datei ein winmerge.sh die auf deinem Weg liegen müssen:

#!/bin/sh
NULL="/dev/null"
if [ "$2" = "$NULL" ] ; then
    echo "removed: $3"
elif [ "$1" = "$NULL" ] ; then
    echo "added: $3"
else
    echo "changed: $3"
    "C:/Program Files (x86)/WinMerge/WinMergeU.exe" -e -ub -dl "Base" -dr "Mine" "$1" "$2"
fi

0 Stimmen

Hervorragende Ergänzung zu den winmerge.sh Skript. +1. Ich habe aktualisiert meine Antwort um auf Ihre Seite zu verlinken.

1 Stimmen

winmerge.bat im zweiten Schnipsel sollte lauten winmerge.sh

0 Stimmen

Kann man das für viele Werkzeuge machen? Und sie nach Dateierweiterung zuordnen?

12voto

Steve Hanov Punkte 10711

Lösung für Windows/ MSYS Git

Nachdem ich die Antworten gelesen hatte, entdeckte ich einen einfacheren Weg, bei dem nur eine Datei geändert werden muss.

  1. Erstellen Sie eine Batch-Datei, um Ihr Diff-Programm mit den Argumenten 2 und 5 aufzurufen. Diese Datei muss sich irgendwo in Ihrem Pfad befinden. (Wenn Sie nicht wissen, wo das ist, legen Sie sie in C:\windows .) Nennen Sie es zum Beispiel "gitdiff.bat". Meine ist:

    @echo off
    REM This is gitdiff.bat
    "C:\Program Files\WinMerge\WinMergeU.exe" %2 %5
  2. Setzen Sie die Umgebungsvariable so, dass sie auf Ihre Batch-Datei verweist. Zum Beispiel: GIT_EXTERNAL_DIFF=gitdiff.bat . Oder über PowerShell durch Eingabe von git config --global diff.external gitdiff.bat .

    Es ist wichtig, dass Sie keine Anführungszeichen verwenden und keine Pfadangaben machen, sonst funktioniert es nicht. Deshalb ist gitdiff.bat muss Ihnen im Weg sein.

Wenn Sie nun "git diff" eingeben, wird Ihr externer Diff-Viewer aufgerufen.

1 Stimmen

+1 (+10, wenn ich könnte.) Dies ist wirklich die einfachste Lösung. Ich kämpfte stundenlang mit der akzeptierten Antwort und gab schließlich auf (einige meiner Probleme hingen wahrscheinlich mit der Ausführung von Git über PowerShell zusammen...) Wie auch immer, ich habe git config --global diff.external winmerge.cmd anstelle der Einstellung der GIT_EXTERNAL_DIFF Umgebungsvariable, und es funktioniert genauso gut.

0 Stimmen

Bei dieser Lösung gibt es ein paar Probleme: 1. Sie funktioniert nicht für neue Dateien. WinMerge fordert mich auf, eine zweite Datei einzugeben, mit der verglichen werden soll. 2. Das Fenster für den Vergleich der nächsten Datei öffnet sich erst nach dem Schließen des aktuellen WinMerge-Fensters, so dass man nicht alle Dateien gleichzeitig sehen kann.

10voto

idbrii Punkte 10063

Wenn Sie dies über Cygwin müssen Sie möglicherweise Folgendes verwenden cygpath :

$ git config difftool.bc3.cmd "git-diff-bcomp-wrapper.sh \$LOCAL \$REMOTE"
$ cat git-diff-bcomp-wrapper.sh
#!/bin/sh
"c:/Program Files (x86)/Beyond Compare 3/BComp.exe" `cygpath -w $1` `cygpath -w $2`

0 Stimmen

Aus irgendeinem Grund funktioniert die Verwendung von "bc3" bei mir nicht mehr, aber wenn ich stattdessen "beyond" verwende, geht es gut.

9voto

David Rawson Punkte 18948

Nachdem ich mir einige andere externe Diff-Tools angesehen hatte, stellte ich fest, dass die diff Ansicht in IntelliJ IDEA (und Android Studio) ist für mich die beste.

Schritt 1 - Einrichten von IntelliJ IDEA für die Ausführung über die Befehlszeile

Wenn Sie IntelliJ IDEA als Diff-Tool verwenden möchten, sollten Sie zunächst IntelliJ IDEA so einrichten, dass es von der Kommandozeile aus ausgeführt werden kann. Folgen Sie dazu den Anweisungen aquí :

Unter macOS oder UNIX:

  1. Stellen Sie sicher, dass IntelliJ IDEA gestartet ist.
  2. Wählen Sie im Hauptmenü Tools | Create Command-line Launcher . Es öffnet sich das Dialogfeld Startskript erstellen mit dem vorgeschlagenen Pfad und Namen des Startskripts. Sie können den Vorschlag akzeptieren oder Ihren eigenen Pfad angeben. Notieren Sie sich diesen, da Sie ihn später benötigen werden. Außerhalb von IntelliJ IDEA fügen Sie den Pfad und den Namen des Startskripts zu Ihrem Pfad hinzu.

Unter Windows:

  1. Geben Sie den Speicherort der ausführbaren IntelliJ IDEA-Datei in der Systemumgebungsvariablen Path an. In diesem Fall können Sie die ausführbare IntelliJ IDEA-Datei und andere IntelliJ IDEA-Befehle von jedem Verzeichnis aus aufrufen.

Schritt 2 - git so konfigurieren, dass IntelliJ IDEA als Difftool verwendet wird

Befolgen Sie die Anweisungen auf dieser Blogbeitrag :

Bash

export INTELLIJ_HOME /Applications/IntelliJ\ IDEA\ CE.app/Contents/MacOS
PATH=$IDEA_HOME $PATH

Fisch

set INTELLIJ_HOME /Applications/IntelliJ\ IDEA\ CE.app/Contents/MacOS
set PATH $INTELLIJ_HOME $PATH

Fügen Sie nun Folgendes zu Ihrer Git-Konfiguration hinzu:

[merge]
   tool = intellij
[mergetool "intellij"]
   cmd = idea merge $(cd $(dirname "$LOCAL") && pwd)/$(basename "$LOCAL") $(cd $(dirname "$REMOTE") && pwd)/$(basename "$REMOTE") $(cd $(dirname "$BASE") && pwd)/$(basename "$BASE") $(cd $(dirname "$MERGED") && pwd)/$(basename "$MERGED")
   trustExitCode = true
[diff]
   tool = intellij
[difftool "intellij"]
   cmd = idea diff $(cd $(dirname "$LOCAL") && pwd)/$(basename "$LOCAL") $(cd $(dirname "$REMOTE") && pwd)/$(basename "$REMOTE")

Sie können es ausprobieren mit git difftool o git difftool HEAD~1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X