¿Por qué git mergetool se abre el 4 de windows en vimdiff?(Me gustaría esperar 3)
Pregunta
Cuando conocí a un conflicto, traté de usar git-mergetool
para resolver.He escrito:
>git mergetool -t vimdiff
Abrió vimdiff
en 4 direcciones, no de 3 vías.Mi división de windows en vimdiff aspecto:
: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 3-way diff:archivo de destino, de combinación de archivos y archivo de trabajo.¿Cómo debo configurar mi git o vimdiff?
Solución
Como alternativa, ¿has pensado en usar fugitivo?
No te voy a mentir; fugitive.vim puede ser el mejor envoltorio Git de todos los tiempos.
Hay un excelente vimcast, Fugitive.vim - Resolución de conflictos de fusión con Vimdiff, por Drew Neil. Esto es parte de una serie sobre Fugitive.
los Vimcasts El sitio web es un buen lugar para obtener más información sobre VIM.
Para usar Fugitive como usted, 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 herramienta de fusión, así que asegúrese de leer la documentación y/o consulte los vimcasts.
Otros consejos
Después de una gran cantidad de investigación para emitir Mergetool con Vimdiff y solo 3 Windows, se me ocurrió esta configuración, eso me permite elegir cuando quiero 3 Windows o las 4 Windows 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 puede iniciar 3 Windows simplemente escribiendo:
git m3
Y el valor predeterminado (4 ventanas) seguirá funcionando como se esperaba 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á atajos como ,1
para agarrar de la izquierda, ,3
para agarrar de la derecha (en ambos modos) y también ,2
Para agarrar desde la base (ventana central) en el modo 4 Windows.
¡Eso ayuda mucho!
Mi ~/.gitconfig
El archivo se 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 (y aquellos 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 que está tratando de hacer los cambios
- 'Remoto' el archivo de la rama con el que está tratando de fusionarse.
Y luego ejecuta el comando: git mergetool
.
Nota: Yo suelo fugitivo también y lo recomiendo encarecidamente.
Nota:mientras que usted puede utilizar sólo 3 de Windows como se describe en Dr Beco's respuesta
(vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'
),
4-el modo de windows es mejorado con git 2.8 (Marzo de 2016)
Ver cometer 2300328 (29 de enero de 2016) por Dickson Wong (diwo
).
(Fusionado por Junio C Hamano -- gitster
-- en cometer 82c17b7, 17 de Febrero de 2016)
El
vimdiff
backend para "git mergetool
"se ha ajustado a organizar y el número de buffers en el orden en que se correspondería con la expectativa de la mayoría de las personas que leen de izquierda a derecha y de arriba hacia abajo y asignar los búferes 1 2 3 4 "mentalmente" a la base local de mezcla remoto basado en windows en ese orden.
Internamente, git ahora uso:
"$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 vim/gvim buffers en los diffsCuando se invoca por defecto (g)
vimdiff
mezcla de tres vías, el archivo combinado es se carga como el primer tampón, pero se trasladó a la parte inferior de la cuarta ventana.
Esto provoca una desconexión entrevim
los comandos que operan en la ventana posiciones (por ejemplo, CTRL-W_w) y aquellos que operan en el búfer de índice (por ejemplo, ¿/dp).Este cambio reordena los búferes de tener el mismo índice de windows, mientras que mantener el cursor predeterminado para el resultado de la combinación como la parte inferior de la ventana.
Secundaré la recomendación fugitiva.
También podrías probar empalme.vim. Es un complemento VIM diseñado para actuar como un reemplazo Git o Mercurial Mergetool Drop-In. Le permite barajar 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í está un screencast.
Los archivos que enumeró son:
- El archivo local que contiene el conflicto.
- El archivo en la rama se está fusionando.
- El archivo en la rama del que se fusiona.
- El archivo como estaba en ambas ramas del nodo Ancesestor. ¡Este archivo es muy útil para descubrir qué está pasando!
Espero que esto ayude.