2010-09-14 12 views
163

configuro git diff para envolver en vimdiff, usando" Git Diff with Vimdiff "como guía, y está funcionando como se esperaba a menos que haya muchos archivos con cambios.Ver todos los `git diffs` con vimdiff

Cuando hay varios archivos con cambios y corro git diff, se abre el primer archivo y, después de dejar la primera instancia de vimdiff, me presentan con el siguiente mensaje:

external diff died, stopping at filename 

Esta es una comportamiento completamente diferente al que estoy acostumbrado. Tenía una configuración similar en el pasado con SVN y, cuando difería en varios archivos, revisaba el primer archivo, luego escribía y salía utilizando :wq y se abría el siguiente archivo con diferencias.

Este no es el caso con Git. Intenté :n[ext], pero al hacerlo no llené la ventana izquierda con el archivo original para que pueda diferir de la versión modificada.

Respuesta

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

Typing git d produce el comportamiento esperado, escribiendo :wq en ciclos vim al siguiente archivo en el conjunto de cambios.

+16

Solo mis dos centavos: tengo 'df' aliased a' diff' y 'dt' aliased a' difftool'. Además, al escribir ': qa' en Vim se pasará al siguiente conjunto de cambios sin guardar nada. – jonyamo

+2

Esta solución es genial, excepto que al guardar los cambios, debe escribir ": w!" en lugar de: w – Asenar

+1

@jonyamo El alias de configuración debe basarse siempre en la frecuencia con la que estamos utilizando algunos comandos. A menudo utilizo 'git diff' que' git difftool'. Así que he aliasado 'd' a 'diff' y''dt 'a 'difftool'. La usabilidad es materia que crear alias con patrón. –

86

Puede probar git difftool, está diseñado para hacer esto.

En primer lugar, es necesario en las configuraciones herramienta de diferencias a vimdiff

git config diff.tool vimdiff 

Entonces, cuando se quiere diff, sólo tiene que utilizar en lugar de git difftoolgit diff. Funcionará como esperabas.

+1

Casi allí! Modificado un poco, es exactamente lo que estoy buscando. +1 sin embargo! – chuckg

+1

El vimdiff mergetool se ha actualizado recientemente: http://git.kernel.org/?p=git/git.git;a=commit;h=829ef383a2b03a614d7d23e575270f2b10a805c1 (y algunos otros commits, pero ese es el más grande). No estoy seguro de cuándo será la próxima versión de mantenimiento, pero si está dispuesto a compilar desde git.git, ¡las actualizaciones serán suyas! – 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

¿Sé lo que está mal en mi respuesta? –

+3

Responde para el mergetool, no el difftool. Pero sigue siendo una respuesta útil. +1. – dotancohen

+0

@dotancohen Realmente gracias, nunca he notado que en un error tonto ahora puedo editar mi respuesta. –

Cuestiones relacionadas