2010-09-14 10 views
163

Konfiguruję git diff, tak aby był zawijany do pliku vimdiff, używając" Git Diff with Vimdiff "jako przewodnika i działa zgodnie z oczekiwaniami, chyba że istnieje wiele plików ze zmianami.Wyświetlanie wszystkich plików `git diffs` przy użyciu polecenia vimdiff

Gdy istnieje wiele plików o zmianach i biegnę git diff, otwiera pierwszy plik, a po rzuceniu pierwszej instancji vimdiff, jestem przedstawiane z następującym komunikatem:

external diff died, stopping at filename 

To jest zupełnie inne zachowanie niż jestem przyzwyczajony. W przeszłości miałem podobne ustawienia z SVN i podczas porównywania z wieloma plikami przeglądałem pierwszy plik, a następnie zapisywałem i kończę pracę przy użyciu :wq, otwierając następny plik z różnicami.

Tak nie jest w przypadku Git. Próbowałem :n[ext], ale robi to nie wypełnia lewego okna oryginalnym plikiem, dzięki czemu można go odróżnić od zmodyfikowanej wersji.

Odpowiedz

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

Typing git d daje oczekiwanego zachowania wpisanie :wq cyklicznie vim do następnego pliku w changeset.

+16

Tylko moje dwa centy: Mam 'df' aliasy na' diff' i 'dt' aliasy na' difftool'. Ponadto wpisanie ': qa' w Vimie spowoduje przejście do następnego zestawu zmian bez zapisywania czegokolwiek. – jonyamo

+2

To rozwiązanie jest świetne, z wyjątkiem tego, że podczas zapisywania zmian trzeba wpisać ": w!" zamiast: w – Asenar

+1

@jonyamo Ustawienie aliasu powinno być zawsze oparte na tym, jak często używamy niektórych poleceń. Często używam 'git diff' niż' git difftool'. Mam aliasy "d" na "diff" i "dt" na "difftool". Użyteczność to materia, niż tworzenie aliasów ze wzorcem. –

86

Możesz spróbować git difftool, jest przeznaczony do wykonywania tych czynności.

Po pierwsze, trzeba config diff narzędzie do Vimdiff

git config diff.tool vimdiff 

Potem, gdy chcesz diff, wystarczy użyć git difftool zamiast git diff. Będzie działać zgodnie z oczekiwaniami.

+1

Prawie już! Zmodyfikowane trochę to dokładnie to, czego szukam. +1! – chuckg

+1

vimdiff mergetool został niedawno zaktualizowany: http://git.kernel.org/?p=git/git.git;a=commit;h=829ef383a2b03a614d7d23e575270f2b10a805c1 (i kilka innych zatwierdzeń, ale jest to największy). Nie jesteś pewien, kiedy pojawi się kolejna wersja obsługi, ale jeśli chcesz zbudować z git.git, uaktualnienia będą twoje! – 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

Czy wiem, co jest nie tak w mojej odpowiedzi? –

+3

Odpowiadasz za mergetool, a nie za difftool. Ale wciąż jest to przydatna odpowiedź. +1. – dotancohen

+0

@dotancohen Naprawdę Dzięki Nigdy nie zauważyłem, że na głupi błąd teraz mogę edytować moją odpowiedź. –