tool open gui git vim vimdiff

open - ¿Por qué git mergetool abre 4 ventanas en vimdiff?(Esperaría 3)



mergetool gui (5)

Como alternativa, ¿has pensado en usar fugitive ?

No te voy a mentir; fugitive.vim puede ser el mejor envoltorio de Git de todos los tiempos.

Hay un video excelente, Fugitive.vim - resolviendo conflictos de fusión con vimdiff , por Drew Neil. Esto es parte de una serie sobre fugitivos.

El Vimcasts web de Vimcasts es un buen lugar para aprender más sobre vim.

Para usar fugitivo como mergetool puede usar lo siguiente.

git config --global mergetool.fugitive.cmd ''vim -f -c "Gdiff" "$MERGED"'' git config --global merge.tool fugitive

Nota: es posible que desee cambiar vim a mvim o gvim .

Fugitive tiene mucho más que ofrecer que solo ser un script de herramientas de combinación, así que asegúrate de leer la documentación y / o consultar los vimcasts.

Cuando encontré un conflicto, traté de usar git-mergetool para resolverlo. Escribí:

>git mergetool -t vimdiff

Abrió vimdiff en 4 vías, no en 3 vías. Mis ventanas divididas en vimdiff se parecen a:

:ls 1 #a "Gemfile.lock" line 1 2 %a "Gemfile.lock.LOCAL.4828.lock" line 1 3 a "Gemfile.lock.BASE.4828.lock" line 0 4 a "Gemfile.lock.REMOTE.4828.lock" line 0

¿Qué son? Quiero un diff de 3 vías: archivo de destino, archivo de combinación y archivo de trabajo. ¿Cómo debo configurar mi git o vimdiff?


Después de mucha investigación para publicar mergetool con vimdiff y solo 3 ventanas, se me ocurrió esta configuración, que me permite elegir cuándo quiero 3 ventanas o las 4 ventanas predeterminadas:

git config --global merge.tool vimdiff git config --global alias.mt mergetool git config --global mergetool.merge3.cmd ''vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'' git config --global alias.m3 ''mergetool -t merge3''

Ahora puedes iniciar 3 ventanas solo escribiendo:

git m3

Y el valor predeterminado (4 ventanas) seguirá funcionando como se espera con:

git mt

Además, probablemente le gustaría agregar estas líneas al final de su ~/.vimrc o /etc/vim/vimrc

" shortcuts to vimdiff let mapleader='','' let g:mapleader='','' if &diff map <leader>1 :diffget LOCAL<CR> map <leader>2 :diffget BASE<CR> map <leader>3 :diffget REMOTE<CR> endif

Esto creará accesos directos como ,1 para agarrar desde la izquierda, ,3 para agarrar desde la derecha (en ambos modos) y también ,2 para agarrar desde la base (ventana central) en el modo de 4 ventanas.

Eso ayuda mucho!

Mi archivo ~/.gitconfig ve así:

[user] name = Dr Beco email = my@email [merge] tool = vimdiff [mergetool "merge3"] cmd = vim -d -c /"wincmd l/" /"$LOCAL/" /"$MERGED/" /"$REMOTE/" [alias] lo = log --pretty=format:/"%h %ce %cd %s/" --graph co = checkout ci = commit cm = commit -a -m st = status br = branch m3 = mergetool -t merge3 mt = mergetool [diff] tool = vimdiff

Espero que esto te ayude a ti (y a los que llegan aquí).


Modificando un poco los comandos de esta página :

git config --global mergetool.vimdiff3.cmd ''vim -f -d "$LOCAL" "$MERGED" "$REMOTE"'' git config --global merge.tool vimdiff3

  • ''Fusionado'' sería su copia de trabajo.
  • ''Local'' el archivo que se encuentra en la rama en la que está intentando realizar los cambios.
  • ''Remoto'' el archivo de la rama con la que está intentando fusionarse.

Y luego ejecutas el comando: git mergetool .

Nota : Yo también uso fugitivo y lo recomiendo altamente.


Nota: mientras que solo puede usar 3 Windows como se describe en la answer
( vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'' ),
el modo de 4 ventanas se ha mejorado con git 2.8 (marzo de 2016)

Ver commit 2300328 (29 de enero de 2016) por Dickson Wong ( diwo ) .
(Fusionada por Junio ​​C Hamano - gitster - in commit 82c17b7 , 17 de febrero de 2016)

El backend de vimdiff para " git mergetool " se ha modificado para organizar y numerar los buffers en el orden que coincidiría con la expectativa de la mayoría de las personas que leen de izquierda a derecha, luego de arriba hacia abajo y asignan los buffers 1 2 3 4 "mentalmente" a la base local ventanas de combinación remota basadas en ese orden.

Internamente, git ahora usará:

"$merge_tool_path" -f -d -c ''4wincmd w | wincmd J'' / "$LOCAL" "$BASE" "$REMOTE" "$MERGED"

en lugar de:

"$merge_tool_path" -f -d -c ''wincmd J'' / "$MERGED" "$LOCAL" "$BASE" "$REMOTE"

mergetool : reordenar buffers vim / gvim en diffs de tres vías

Cuando se invoca la vimdiff tres vías predeterminada (g) vimdiff , el archivo combinado se carga como el primer búfer, pero se mueve a la parte inferior como la cuarta ventana.
Esto provoca una desconexión entre los comandos vim que operan en las posiciones de la ventana (por ejemplo, CTRL - W_w ) y aquellos que operan en el índice del búfer (por ejemplo, do / dp ).

Este cambio reordena los búferes para que tengan el mismo índice que Windows, manteniendo el cursor predeterminado para el resultado combinado como la ventana inferior.


Voy a secundar la recomendación fugitiva.

También puedes probar splice.vim . Es un complemento de Vim diseñado para actuar como un reemplazo instantáneo de git o mergetool mercurial. Te permite mezclar fácilmente varias vistas del conflicto. También es muy rápido, directo y hace un buen trabajo para hacer que la fusión sea más intuitiva. Aquí hay un screencast .

Los archivos que has listado son:

  1. El archivo local que contiene el conflicto.
  2. El archivo en la rama en la que se está fusionando.
  3. El archivo en la rama de la que se está fusionando.
  4. El archivo tal y como estaba en el nodo ancesestor de ambas ramas. ¡Este archivo es muy útil para descubrir qué está pasando!

Espero que esto ayude.