2010-09-14 10 views
163

Ho impostato git diff per eseguire il wrapping in vimdiff, utilizzando" Git Diff with Vimdiff "come guida e funziona come previsto, a meno che non ci siano molti file con modifiche.Visualizzazione di `git diffs` con vimdiff

Quando ci sono più file con modifiche e corro git diff, si apre il primo file e, dopo aver lasciato la prima istanza di vimdiff, sto presentato con il seguente messaggio:

external diff died, stopping at filename 

Questo è un comportamento completamente diverso da quello a cui sono abituato. Avevo un setup simile in passato con SVN e, quando si diffondeva su più file, passavo in rassegna il primo file, quindi scrivevo e uscivo usando :wq e il prossimo file con le differenze si apriva.

Questo non è il caso di Git. Ho provato :n[ext], ma farlo non riempie la finestra di sinistra con il file originale in modo che possa essere diffuso rispetto alla versione modificata.

risposta

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

Digitando git d produce il comportamento previsto, digitando :wq in cicli vim al file successivo nella changeset.

+16

Solo i miei due centesimi: ho 'df' aliasato a' diff' e 'dt' aliasato a' difftool'. Inoltre, digitando ': qa' in Vim si passa al successivo changeset senza salvare nulla. – jonyamo

+2

Questa soluzione è ottima tranne per il fatto che durante il salvataggio delle modifiche devi digitare ": w!" invece di: w – Asenar

+1

@jonyamo L'impostazione dell'alias dovrebbe essere sempre basata sulla frequenza con cui stiamo usando alcuni comandi. Sto spesso usando 'git diff' di' git difftool'. Quindi ho alias 'd' a 'diff' e' 'dt' a 'difftool '. L'usabilità è importante rispetto alla creazione di alias con pattern. –

86

Si può provare git difftool, è progettato per fare questo roba.

In primo luogo, è necessario strumento di configurazione diff per vimdiff

git config diff.tool vimdiff 

Poi, quando si vuole diff, basta usare git difftool invece di git diff. Funzionerà come ti aspetti.

+1

Quasi lì! Modificato un po 'è esattamente quello che sto cercando. +1 però! – chuckg

+1

L'aggregazione di vimdiff è stata recentemente aggiornata: http://git.kernel.org/?p=git/git.git;a=commit;h=829ef383a2b03a614d7d23e575270f2b10a805c1 (e alcuni altri commit, ma quello è il più grande). Non sono sicuro quando sarà la prossima versione di manutenzione, ma se sei disposto a costruire da git.git, gli aggiornamenti saranno tuoi! – 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

So cosa c'è di sbagliato nella mia risposta –

+3

Si risponde per il mergetool, non per il difftool. Ma è ancora una risposta utile. +1. – dotancohen

+0

@dotancohen Davvero grazie non ho mai notato che su uno stupido errore ora posso modificare la mia risposta. –

Problemi correlati