2010-09-14 7 views
163

Ich habe git diff eingerichtet, um in vimdiff einzubinden, mit" Git Diff with Vimdiff "als Leitfaden, und es funktioniert wie erwartet, es sei denn, es gibt viele Dateien mit Änderungen. Anzeigen aller `git diffs` mit vimdiff

Wenn mehrere Dateien mit Änderungen und ich laufe git diff, öffnet es die erste Datei, und nach der ersten Instanz von vimdiff verlassen, ich bin mit der folgenden Meldung präsentiert:

external diff died, stopping at filename 

Dies ist ein völlig anderes Verhalten als ich es gewohnt bin. Ich hatte ein ähnliches Setup in der Vergangenheit mit SVN und, wenn gegen mehrere Dateien diffing, würde ich die erste Datei überprüfen, dann schreiben und beenden :wq und die nächste Datei mit Differenzen mit eröffnen würde. Diese

ist nicht der Fall mit Git. Ich habe versucht, :n[ext], aber dabei füllt das linke Fenster nicht mit der ursprünglichen Datei, so dass es gegen die modifizierte Version diffundiert werden kann.

Antwort

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

git d Typing ergibt das erwartete Verhalten, :wq in vim Zyklen zur nächsten Datei in den changeset eingeben.

+16

Nur meine zwei Cent: Ich habe 'df' auf" diff "und 'dt' auf" difftool "aliasiert. Das Eingeben von ': qa' in Vim wird zum nächsten Änderungssatz ohne Speichern von Daten führen. – jonyamo

+2

Diese Lösung ist großartig, außer dass beim Speichern von Änderungen ": w!" statt: w – Asenar

+1

@jonyamo Das Setzen von Alias ​​sollte immer darauf basieren, wie oft wir einige Befehle verwenden. Ich benutze oft 'git diff' als' git difftool'. Also habe ich "d" auf "diff" und "dt" auf "difftool" gesetzt. Usability ist wichtiger als Aliases mit Pattern zu erstellen. –

86

Sie können git difftool versuchen, ist es entworfen, um dieses Material zu tun.

Zuerst müssen Sie Diff-Tool config

git config diff.tool vimdiff 

Dann vimdiff, wenn Sie diff möchten, verwenden Sie nur git difftool statt git diff. Es wird funktionieren, wie Sie es erwarten.

+1

Fast da! Etwas modifiziert, es ist genau das, wonach ich suche. +1 obwohl! – chuckg

+1

Die vimdiff mergetool wurde kürzlich aktualisiert: http://git.kernel.org/?p=git/git.git;a=commit;h=829ef383a2b03a614d7d23e575270f2b10a805c1 (und ein paar andere Commits, aber das ist die größte). Ich bin mir nicht sicher, wann das nächste Wartungs-Release sein wird, aber wenn du bereit bist, aus git.git zu bauen, sollten Upgrades dein sein! – Cascabel

15
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 
+0

Ich weiß, was in meiner Antwort falsch ist –

+3

Sie antworten für das Mergetool, nicht das Difftool. Aber es ist immer noch eine hilfreiche Antwort. +1. – dotancohen

+0

@dotancohen Wirklich Danke, ich habe nie bemerkt, dass auf dumme Fehler jetzt kann ich meine Antwort bearbeiten. –

Verwandte Themen