Wenn ich "git diff" eingebe, möchte ich ein Side-by-Side-Diff sehen, wie bei "diff -y", oder das Diff in einem interaktiven Diff-Tool wie "kdiff3" anzeigen. Wie kann das gemacht werden?
163
Wenn ich "git diff" eingebe, möchte ich ein Side-by-Side-Diff sehen, wie bei "diff -y", oder das Diff in einem interaktiven Diff-Tool wie "kdiff3" anzeigen. Wie kann das gemacht werden?
Antworten:
Obwohl Git eine interne Implementierung von diff hat, können Sie stattdessen ein externes Tool einrichten.
Es gibt zwei verschiedene Möglichkeiten, ein externes Diff-Tool anzugeben:
GIT_EXTERNAL_DIFF
und derGIT_DIFF_OPTS
Umgebungsvariablen.git config
Siehe auch:
git diff --help
Dabei
git diff
überprüft Git sowohl die Einstellungen der oben genannten Umgebungsvariablen als auch deren.gitconfig
Datei.Standardmäßig übergibt Git die folgenden sieben Argumente an das diff-Programm:
Normalerweise benötigen Sie nur die Parameter für alte und neue Dateien. Natürlich verwenden die meisten Diff-Tools nur zwei Dateinamen als Argument. Dies bedeutet, dass Sie ein kleines Wrapper-Skript schreiben müssen, das die Argumente, die Git für das Skript bereitstellt, übernimmt und an das externe Git-Programm Ihrer Wahl weitergibt.
Angenommen, Sie legen Ihr Wrapper-Skript unter
~/scripts/my_diff.sh
:Sie müssen das Skript dann ausführbar machen:
Sie müssen Git dann mitteilen, wie und wo Sie Ihr benutzerdefiniertes Diff-Wrapper-Skript finden. Sie haben drei Möglichkeiten, dies zu tun: (Ich bevorzuge das Bearbeiten der .gitconfig-Datei)
Verwenden von
GIT_EXTERNAL_DIFF
,GIT_DIFF_OPTS
zB in Ihrer .bashrc- oder .bash_profile-Datei können Sie Folgendes einstellen:
Verwenden von
git config
Verwenden Sie "git config", um zu definieren, wo sich Ihr Wrapper-Skript befindet:
Bearbeiten Sie Ihre
~/.gitconfig
DateiSie können Ihre
~/.gitconfig
Datei bearbeiten , um folgende Zeilen hinzuzufügen:Hinweis:
Ähnlich wie bei der Installation Ihres benutzerdefinierten Diff-Tools können Sie auch ein benutzerdefiniertes Zusammenführungs-Tool installieren, das ein visuelles Zusammenführungswerkzeug sein kann, um die Visualisierung der Zusammenführung besser zu unterstützen. (siehe die progit.org Seite)
Siehe: http://fredpalma.com/518/visual-diff-and-merge-tool/ und https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
quelle
meld
?meld
Version für ein Verzeichnisdiff konfiguriert werden, bei dem ich auswählen kann, für welche Datei (en) ich das Diff anzeigen möchte? Derzeit wirdmeld
für jede Datei ein separater Befehl ausgeführt, und ich muss beendenmeld
, um die nächste Datei anzuzeigen. Ich hätte mir liebermeld
eine Verzeichnisliste der geänderten Dateien gezeigt, wie sie sich verhalten, wennmeld
sie von Mercurial verwendet werden.Versuchen Sie es mit Git Difftool
Verwenden Sie
git difftool
anstelle vongit diff
. Du wirst niemals zurückkehren.UPDATE, um eine Beispielverwendung hinzuzufügen:
Hier ist ein Link zu einem anderen Stackoverflow, der Folgendes behandelt
git difftool
: Wie kann ich die Ausgabe von 'git diff' mit meinem bevorzugten Diff-Tool / Viewer anzeigen?Für neuere Versionen von
git
unterstützt derdifftool
Befehl viele sofort einsatzbereite externe Diff-Tools. Zum Beispielvimdiff
wird automatisch unterstützt und kann über die Befehlszeile geöffnet werden durch:Andere unterstützte externe Diff-Tools sind hier aufgelistet.
git difftool --tool-help
Dies ist eine Beispielausgabe:quelle
This message is displayed because 'diff.tool' is not configured.
. Vielleicht aktualisieren Sie die Antwort mit minimaler Konfiguration dieses Dings, so dass nebeneinander Unterschiede im Terminal angezeigt werden. Was hat OP verlangt? GUI-Tools sind auf Remote-Servern, auf denen Sie eine Verbindung mit ssh herstellen, ziemlich nutzlos.git difftool
beivimdiff
der die beiden Dateien / Puffer nicht immer richtig ausgerichtet sind.git difftool -y
, um tkdiff prompt zu verhinderngit difftool
in Windows & Linux verschmelzen : stackoverflow.com/a/48979939/4561887Sie können es auch versuchen
git diff --word-diff
. Es ist nicht gerade Seite an Seite, aber irgendwie besser, also ziehen Sie es vielleicht Ihrem tatsächlichen Bedarf an Seite an Seite vor.quelle
git diff --word-diff=color
--word-diff=color
gibt mir einen ungültigen Optionsfehler. In welcher Version wurde es eingeführt?git diff --color-words
funktioniert.git diff --color-words
ist der Weg zu modernen Git-Versionen.ydiff
Früher genannt
cdiff
, kann dieses Tool nebeneinander , inkrementell und farbenfroh angezeigt werden.Anstatt zu tun
git diff
, tun Sie:Dies wird
ydiff
im Side-by-Side-Anzeigemodus für jede der Dateien mit Unterschieden gestartet .Installieren mit:
-oder-
Für
git log
können Sie verwenden:-w0
Erkennt automatisch Ihre Terminalbreite. Weitereydiff
Informationen und eine Demo finden Sie auf der GitHub-Repository-Seite .Getestet in Git 2.18.0, ydiff 1.1.
quelle
git diff | cdiff -s
zu icdiff macht?ydiff -s
von einem git / svn / hg-Arbeitsbereich aus, Sie müssen nichtcd <git repo>
führen Sie ihn ausydiff -ls <path/to/file>
Sie können eine Seite-an-Seite zu tun
diff
mitsdiff
wie folgt:Wo
HEAD^
ist ein Beispiel, das Sie durch alles ersetzen sollten, gegen das Sie sich unterscheiden möchten.Ich habe diese Lösung hier gefunden, wo es auch ein paar andere Vorschläge gibt. Diese eine Antwort ist jedoch die Frage des OP kurz und klar.
Eine Erklärung der Argumente finden Sie im man git-difftool .
Wenn Sie die Kommentare berücksichtigen, können Sie einen praktischen
git sdiff
Befehl erstellen, indem Sie das folgende ausführbare Skript schreiben:Speichern Sie es als
/usr/bin/git-sdiff
undchmod -x
es. Dann können Sie Folgendes tun:quelle
tput cols
stattdessen zum Beispiel :git difftool -x "sdiff -s -w $(tput cols)"
.dann einfach:
quelle
Wenn Sie in einem Browser nebeneinander Unterschiede sehen möchten , ohne GitHub einzubeziehen , könnte Ihnen git webdiff gefallen , ein Ersatz für
git diff
:Dies bietet eine Reihe von Vorteilen gegenüber herkömmlichen GUI-Difftools
tkdiff
, da Sie damit Syntax hervorheben und Bildunterschiede anzeigen können.Lesen Sie hier mehr darüber .
quelle
Ich benutze Colordiff .
Installieren Sie es unter Mac OS X mit
Unter Linux ist möglicherweise
apt get install colordiff
oder so etwas, abhängig von Ihrer Distribution.Dann:
Oder erstellen Sie einen Alias
Dann können Sie es verwenden
Ich habe es "diffy" genannt, weil
diff -y
es das Side-by-Side-Diff in Unix ist. Colordiff fügt auch Farben hinzu, die schöner sind. In der Option-ydw
ist dasy
für die Seite an Seite, dasw
ist das Ignorieren von Leerzeichen und dasd
ist das Erzeugen des minimalen Diff (normalerweise erhalten Sie ein besseres Ergebnis als Diff).quelle
-y
, um dieLaunch 'colordiff' [Y/n]:
Eingabeaufforderung zu überspringen .git alias diffy "difftool --extcmd=\"colordiff -ydw\""
? Sollte es nicht seingit config --global alias.diffy "difftool --extcmd=\"colordiff -ydw\""
?Für Unix kombinieren Sie nur
git
und das eingebautediff
:Natürlich können Sie HEAD durch eine andere Git-Referenz ersetzen, und Sie möchten wahrscheinlich
-W 170
dem Befehl diff etwas Ähnliches hinzufügen .Dies setzt voraus, dass Sie nur Ihren Verzeichnisinhalt mit einem früheren Commit vergleichen. Der Vergleich zwischen zwei Commits ist komplexer. Wenn Ihre Shell ist
bash
, können Sie "Prozessersetzung" verwenden:wo
REF1
undREF2
sind Git-Referenzen - Tags, Zweige oder Hashes.quelle
Ich persönlich mag icdiff sehr !
Wenn Sie auf
Mac OS X
mitHomeBrew
, nur zu tunbrew install icdiff
.Um die Dateibeschriftungen und andere coole Funktionen korrekt zu erhalten, habe ich in meinem
~/.gitconfig
:Und ich benutze es wie:
git difftool
quelle
Diese Frage tauchte auf, als ich nach einer schnellen Möglichkeit suchte, mithilfe der integrierten Git-Methode Unterschiede zu lokalisieren. Meine Lösungskriterien:
Ich habe diese Antwort gefunden , um Farbe in Git zu bekommen.
Um nebeneinander diff statt line diff zu erhalten, habe ich die ausgezeichnete Antwort von mb14 auf diese Frage mit den folgenden Parametern optimiert :
Wenn Ihnen das zusätzliche [- oder {+ nicht gefällt,
--word-diff=color
kann die Option verwendet werden.Dies half beim richtigen Vergleich mit json- und xml-Text und Java-Code.
Zusammenfassend lässt sich sagen, dass die
--word-diff-regex
Optionen zusammen mit den Farbeinstellungen eine hilfreiche Sichtbarkeit bieten, um beim Durchsuchen großer Dateien mit kleinen Zeilenänderungen ein farblich abgestimmtes Quellcodeerlebnis im Vergleich zum Standard-Zeilendifferenz zu erzielen.quelle
Einige andere erwähnten bereits cdiff für Git Side-by-Side-Unterschiede, aber niemand gab eine vollständige Implementierung davon.
Setup cdiff:
Bearbeiten Sie ~ / .gitconfig, indem Sie die folgenden Zeilen einfügen:
Der Pager aus wird benötigt, damit cdiff mit Diff funktioniert. Es handelt sich im Wesentlichen um einen Pager, daher ist dies in Ordnung. Difftool funktioniert unabhängig von diesen Einstellungen.
Der Show-Alias wird benötigt, da git show nur externe Diff-Tools über Argumente unterstützt.
Das '#' am Ende des Befehls diff external ist wichtig. Der Diff-Befehl von Git hängt ein $ @ (alle verfügbaren Diff-Variablen) an den Diff-Befehl an, aber wir wollen nur die beiden Dateinamen. Also rufen wir diese beiden explizit mit $ 2 und $ 5 auf und verstecken dann das $ @ hinter einem Kommentar, der sdiff sonst verwirren würde. Daraus resultiert ein Fehler, der wie folgt aussieht:
Git-Befehle, die jetzt nebeneinander Unterschiede erzeugen:
Cdiff Verwendung:
Sie haben jetzt Side-by-Side-Diff über Git Diff und Difftool. Und Sie haben den cdiff Python-Quellcode für die Anpassung von Hauptbenutzern, falls Sie ihn benötigen.
quelle
Hier ist ein Ansatz. Wenn Sie weniger durchpfeifen, wird die xterm-Breite auf 80 eingestellt, was nicht so heiß ist. Wenn Sie den Befehl jedoch mit z. B. COLS = 210 ausführen, können Sie Ihr erweitertes xterm verwenden.
quelle
Öffnen Sie Intellij IDEA , wählen Sie im Toolfenster "Versionskontrolle" ein oder mehrere Commits aus, durchsuchen Sie geänderte Dateien und doppelklicken Sie darauf, um die Änderungen für jede Datei nebeneinander zu überprüfen.
Mit dem mitgelieferten Befehlszeilen-Launcher können Sie IDEA mit einem einfachen Befehl überall aufrufen
idea some/path
quelle
Es gibt viele gute Antworten auf diesen Thread. Meine Lösung für dieses Problem bestand darin, ein Skript zu schreiben.
Nennen Sie diesen 'git-scriptname' (und machen Sie ihn ausführbar und fügen Sie ihn wie jedes Skript in Ihren PATH ein), und Sie können ihn wie einen normalen git-Befehl aufrufen, indem Sie ihn ausführen
Die eigentliche Funktionalität ist nur die letzte Zeile. Hier ist die Quelle:
quelle