Visualizzazione di tutti i `git diffs` con vimdiff


210

Ho impostato git diffper avvolgere in vimdiff, usando " Git Diff con Vimdiff " come guida, e funziona come previsto a meno che non ci siano molti file con modifiche.

Quando ci sono più file con modifiche ed git diffeseguo, si apre il primo file e, dopo aver chiuso la prima istanza di vimdiff, mi viene presentato il seguente messaggio:

external diff died, stopping at filename

Questo è un comportamento completamente diverso da quello a cui sono abituato. In passato avevo una configurazione simile con SVN e, in caso di differenza con più file, avrei esaminato il primo file, quindi avrei scritto e chiuso usando :wqe il file successivo con differenze si sarebbe aperto.

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.

Risposte:


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

La digitazione git dproduce il comportamento previsto, digitando :wqcicli vim nel file successivo nel changeset.


22
Solo i miei due centesimi: ho dfaliasato diffe dtaliasato difftool. Inoltre, digitando :qaVim si passa al prossimo changeset senza salvare nulla.
JC Yamokoski il

2
Questa soluzione è eccezionale, tranne per il fatto che quando si salvano le modifiche è necessario digitare ": w!" anziché: w
Asenar il

2
@jonyamo L'impostazione dell'alias dovrebbe essere sempre basata sulla frequenza con cui utilizziamo alcuni comandi. Sto usando spesso git diffdi git difftool. Quindi ho deciso ddi "diff" e 'dt' to difftool ". L'usabilità è una questione di creazione di alias con pattern.
Habeeb Perwad,

Come usare "git diff" in vimdiff? Questa risposta mi fa usare un alias. Se alias "diff" non funziona.
Rombus,

6
@Asenar "Questa soluzione è eccezionale, tranne per il fatto che quando si salvano le modifiche è necessario digitare :w!invece di :w". Questo perché git chiama vimdiffcon l' -Ropzione. Puoi sovrascriverlo con git config --global difftool.vimdiff.cmd 'vimdiff "$LOCAL" "$REMOTE"'. Ciò aprirà vimdiff in modalità scrivibile.
Wisbucky,

103

Puoi provare git difftool, è progettato per fare queste cose.

Innanzitutto, devi configurare lo strumento diff su vimdiff

git config diff.tool vimdiff

Quindi, quando si desidera diff, basta usare git difftoolinvece di git diff. Funzionerà come previsto.


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

1
La fusione di vimdiff è stata recentemente aggiornata: git.kernel.org/?p=git/… (e alcuni altri commit, ma è il più grande). Non sono sicuro di quando sarà la prossima versione di manutenzione, ma se sei disposto a compilare da git.git, gli aggiornamenti saranno tuoi!
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

3
Tu rispondi per la fusione, non per il difftool. Ma è ancora una risposta utile. +1.
dotancohen,

@dotancohen Grazie davvero, non ho mai notato che su un errore sciocco ora posso modificare la mia risposta.
Nanhe Kumar,

1
@NanheKumar, @dotancohen, la sostituzione mergecon diffle risposte sopra farà il trucco, vale a dire git config --global diff.tool vimdiff .
Sarà il

2

Per le persone che vogliono usare un altro strumento diff non elencato in git, diciamo con nvim. ecco cosa ho finito per usare:

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

Nel mio caso, ho impostato <tool name>per nvim -de richiamare il comando diff con

git d <file>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.