Anzeigen aller `git diffs` mit vimdiff

209

Ich habe git diffmich so eingerichtet, dass es in vimdiff eingebunden wird, wobei " Git Diff with Vimdiff " als Leitfaden verwendet wird, und es funktioniert wie erwartet, es sei denn, es gibt viele Dateien mit Änderungen.

Wenn mehrere Dateien mit Änderungen vorhanden sind und ich sie ausführe git diff, wird die erste Datei geöffnet. Nach dem Beenden der ersten Instanz von vimdiff wird die folgende Meldung angezeigt:

external diff died, stopping at filename

Dies ist ein völlig anderes Verhalten als ich es gewohnt bin. Ich hatte in der Vergangenheit ein ähnliches Setup mit SVN und wenn ich mich von mehreren Dateien unterschied, überprüfte ich die erste Datei, schrieb und beendete sie mit :wqund die nächste Datei mit Unterschieden öffnete sich.

Dies ist bei Git nicht der Fall. Ich habe es versucht :n[ext], aber dadurch wird das linke Fenster nicht mit der Originaldatei gefüllt, sodass es sich von der geänderten Version unterscheiden kann.

chuckg
quelle

Antworten:

337
git config --global diff.tool vimdiff
git config --global difftool.prompt false
git config --global alias.d difftool

Die git dEingabe ergibt das erwartete Verhalten und tippt :wqin vim-Zyklen zur nächsten Datei im Änderungssatz.

chuckg
quelle
22
Nur meine zwei Cent: Ich habe dfAliasing diffund dtAliasing zu difftool. :qaWenn Sie Vim eingeben , gelangen Sie zum nächsten Änderungssatz, ohne etwas zu speichern.
JC Yamokoski
2
Diese Lösung ist großartig, außer dass Sie beim Speichern von Änderungen ": w!" statt: w
Asenar
2
@jonyamo Das Festlegen des Alias ​​sollte immer davon abhängen, wie oft wir einige Befehle verwenden. Ich benutze oft git diffals git difftool. Also habe ich mich dauf 'diff' und 'dt' to difftool 'eingestellt. Benutzerfreundlichkeit ist wichtiger als das Erstellen von Aliasnamen mit Mustern.
Habeeb Perwad
Wie kann ich "git diff" dazu bringen, vimdiff zu verwenden? Bei dieser Antwort verwende ich einen Alias. Wenn ich einen Alias ​​für "diff" habe, funktioniert das nicht.
Rombus
6
@Asenar "Diese Lösung ist großartig, außer dass Sie beim Speichern von Änderungen :w!statt :w" eingeben müssen . Das liegt daran, dass Git vimdiffmit der -ROption aufruft . Sie können es mit überschreiben git config --global difftool.vimdiff.cmd 'vimdiff "$LOCAL" "$REMOTE"'. Dadurch wird vimdiff im beschreibbaren Modus geöffnet.
wisbucky
103

Sie können versuchen git difftool, es wurde entwickelt, um dieses Zeug zu tun.

Zuerst müssen Sie das Diff-Tool für vimdiff konfigurieren

git config diff.tool vimdiff

Wenn Sie sich dann unterscheiden möchten, verwenden Sie einfach git difftoolanstelle von git diff. Es wird so funktionieren, wie Sie es erwarten.

czchen
quelle
1
Fast dort! Ein bisschen modifiziert ist es genau das, wonach ich suche. +1 obwohl!
Chuckg
1
Das vimdiff-Mergetool wurde kürzlich aktualisiert: git.kernel.org/?p=git/… (und einige andere Commits, aber das ist das größte). Sie sind sich nicht sicher, wann die nächste Wartungsversion verfügbar sein wird, aber wenn Sie bereit sind, aus git.git zu erstellen, gehören Upgrades Ihnen!
Cascabel
21
Git accepts kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge,
and opendiff as valid diff tools. You can also set up a custom tool. 

git config --global diff.tool vimdiff
git config --global diff.tool kdiff3
git config --global diff.tool meld
git config --global diff.tool xxdiff
git config --global diff.tool emerge
git config --global diff.tool gvimdiff
git config --global diff.tool ecmerge
Nanhe Kumar
quelle
3
Sie antworten für das Mergetool, nicht für das Difftool. Aber es ist immer noch eine hilfreiche Antwort. +1.
Dotancohen
@dotancohen Wirklich danke Ich habe nie bemerkt, dass ich meine Antwort aufgrund eines dummen Fehlers jetzt bearbeiten kann.
Nanhe Kumar
1
@NanheKumar, @dotancohen, das Ersetzen mergedurch diffin den obigen Antworten wird den Trick tun, dh git config --global diff.tool vimdiff .
Wird
2

Für Leute, die ein anderes Diff-Tool verwenden möchten, das nicht in Git aufgeführt ist, sagen wir mit nvim. Folgendes habe ich letztendlich verwendet:

git config --global alias.d difftool -x <tool name>

In meinem Fall, habe ich <tool name>auf nvim -dund rufen Sie den Befehl diff mit

git d <file>
salziger Katzenfisch
quelle