commands - git, vimdiff y dirdiff
vimdiff commands (4)
Estoy tratando de usar vimdiff + dirdiff.vim para diferenciar dentro de varios archivos Vim versionados con Git.
Para Mercurial, es posible con la extensión de mercurial extdiff .
La única forma que encontré en la web para integrar Vim con Git diff es usar vimdiff en un archivo único, como se describe en esta publicación .
¿Alguien sabe cómo usar vimdiff + dirdiff + git?
Antes de git versión 1.7.11
git-diffall
es lo que necesito, muchas gracias. Con la ayuda de esta page sobre git difftool y sobre la ejecución de vim + dirdiff desde la línea de comandos, escribí mi $HOME/.gitconfig
como:
[diff]
tool = default-difftool
[difftool "default-difftool"]
cmd = vim -f ''+next'' ''+execute /"DirDiff/" argv(0) argv(1)'' $LOCAL $REMOTE
[difftool]
prompt = false
Después de poner git-diffall
en mi PATH
, puedo diferenciar, por ejemplo, el directorio de trabajo con rama dev
con:
git diffall dev
El --copy-back
también es lo que necesito si quiero modificar el directorio de trabajo de Vim de forma persistente:
git diffall --copy-back dev
Desde git versión 1.7.11
Desde la versión 1.7.11 , "git difftool" aprendió la opción "--dir-diff" que simplifica las cosas y ya no se necesita git-diffall
.
.gitconfig
contiene:
[diff]
tool = default-difftool
[difftool "default-difftool"]
cmd = vim -f ''+next'' ''+execute /"DirDiff/" argv(0) argv(1)'' $LOCAL $REMOTE ''+syntax off''
Y diferenciar, por ejemplo, el directorio de trabajo con rama dev
se hace con:
git difftool -d dev
El fugitive Tim Pope es el complemento de git por excelencia para vim. Puede que no tenga la funcionalidad de dirdiff, pero integra la salida de git status
hermosa, con asignaciones de teclas para navegar fácilmente entre archivos modificados. Todos los archivos enumerados en la salida de git status
se pueden diferenciar fácilmente con la asignación en D , lo que le permite personalizar los cambios exactos de sus cambios.
Git no admite los directorios directamente, pero se puede hacer con una extensión de terceros.
Echa un vistazo a git diffall
(divulgación: escribí este script). Este script funciona con el conjunto de herramientas de git config diff.tool <TOOL>
para realizar una diferencia de directorio real.
También, vea estas preguntas relacionadas:
Sería interesante monitorear las confirmaciones para el fugitivo del módulo Vim , ya que, comenzando con ( git 1.7.11 , junio de 2012), git ahora puede diferir directorios (es decir, mostrar todos los archivos que se compararán, antes de abrir el difftool
)
Ver " git difftool
para dar comparación de directorio? "
Entonces, agregar esa característica a fugitive.vim
sería una evolución de un enfoque de archivo a archivo.
Sin embargo, Zyx señala en el comentario los límites de ese enfoque:
Todo lo que necesitas para que funcione es:
git diff --name-status
ygit cat-file
,Nada más (excepto algún código
vimscript
).
Y, a diferencia degit difftool
, esto funciona para cualquier VCS con vcsdiff
y vcscat-file
support
Zyx menciona como ejemplo del enfoque de archivo por archivo su proyecto aurum :
Mi aurum tiene una funcionalidad
AuVimDiff full
(AuVimDiff full
abre un montón de pestañas con vista devimdiff
de archivos que tienen diferencias) y nunca usó ningún tipo de soporte dedifftool
.
(Ver script aurum / autoload / aurum / vimdiff.vim
)
Zyx agrega:
no puede ser una buena guía para una persona que desea agregar esta funcionalidad a fugitivo:
La llamada real degit diff --name-status
está oculta dentro del controlador git en una función llamada pors:git.status
accede comorepo.functions.status
(porque mercurial usahg status -r rev1:rev2
, nohg diff --name-status
y me parece bastante lógico).
Por lo tanto, debe atravesar tres niveles de abstracción aquí (interfaz del repositorio, envoltura de comandos de shell y solo entonces la llamada git real).
Es más rápido escribir todo desde cero.