Mi fusión reciente de Git ha resultado en una gran cantidad de conflictos. Mi enfoque actual es buscar la próxima aparición de '<<<' y luego realizar la fusión mediante la edición de texto estándar.
Pregunta : ¿hay alguna forma en que Emacs pueda admitir la fusión utilizando la información disponible en Git sobre mi versión, su versión y la versión base del archivo?
Editar: Esta pregunta tiene un alcance diferente al de esta pregunta relacionada , ya que no se limita a invocar ediff.
e
archivos que se muestran como conflictivos. Magit se iniciaríaediff
para hacer la fusión y luego le pedirá que confirme sus cambios, luego podría organizar el archivo combinado.smerge
yvc-resolve-conflict
, además de unaediff
), y ha estado disponible por más tiempo. Sin embargo, estoy de acuerdo en que el primer hilo podría usar un título mejor.Respuestas:
Es posible que desee probar
smerge-mode
simplemente abrir el archivo en conflicto y hacerlo M-xsmerge-mode
RET. Destacará todas las regiones en conflicto. También agrega combinaciones de teclas para resolver fácilmente los conflictos, consulte su documentación C-hfsmerge-mode
RETpara conocerlos.Prefijo predeterminado
Encuentro el prefijo predeterminado para
smerge-mode
C-c^engorroso, así que lo he cambiado a C-cvCombinaciones de teclas importantes
Para mí, los enlaces más importantes son:
smerge-next
obligado a smerge-command-prefixnpasar al siguiente conflicto.smerge-previous
obligado a smerge-command-prefixppasar al conflicto anterior.smerge-keep-current
obligado a smerge-command-prefixRETmantener la versión en la que está el cursor.smerge-keep-mine
obligado a smerge-command-prefixmmantener sus cambios.smerge-keep-other
obligado a smerge-command-prefixomantener otros cambios.smerge-ediff
obligado a smerge-command-prefixEcomenzar una sesión de ediff para fusionar los conflictos. Esto es lo mismo quevc-resolve-conflicts
(gracias @phils y @Malabarba por señalar esto).Habilitar el modo smerge automáticamente
ACTUALIZACIÓN: Lo siguiente solo es relevante en las versiones de Emacs anteriores
25.1
, lo siguiente puede causar problemas en versiones posteriores, consulte https://github.com/magit/magit/issues/3897Además, puede estar interesado en habilitar automáticamente
smerge-mode
cuando visite un archivo / búfer con marcadores de conflicto, puede usar algo como lo siguiente para lograr estoTenga en cuenta que estoy usando
buffer-list-update-hook
y no,find-file-hook
ya que la mayoría de las veces tengo conflictos en un búfer que ya está abierto en emacs, en cuyo caso nofind-file-hook
sirve de nada.También verifique otros métodos mencionados en esta respuesta
fuente
smerge-ediff
. (2) ¿En qué versión de Emacs estás? En la rama maestra actual de emacs, smerge se activa automáticamente. (3) ¿Por qué estás usando enbuffer-list-update-hook
lugar defind-file-hook
?smerge-ediff
yvc-resolve-conflicts
son lo mismo.smerge-mode
las combinaciones de teclas están documentadas en su documentación. Tal vez pueda citar el manual aquí para completarlo. Gracias por la respuesta. 2) Estoy en v24.5, aunque a veces pruebo la rama maestra, no recuerdo que se haya activado automáticamente (¿es un cambio reciente?). 3) Esto se debe a que la mayoría de las veces tengo conflictos en búferes ya abiertos, en cuyo caso tendría que activar explícitamentesmerge-mode
smerge-mode
habilitado todo el tiempo? Quizás no haga mucho hasta que se invoque.Editar: dado que esta respuesta obtuvo más votos positivos de lo que esperaba, la amplié un poco.
Para complementar la respuesta de @IqbalAnsari, también puede usar
vc-resolve-conflicts
(como lo han mencionado otros, es un aliassmerge-ediff
). Esto iniciará laediff
interfaz. A la izquierda estará el primer padre de fusión y el segundo padre de fusión a la derecha. Están etiquetados en la línea de modelo conMINE
yOTHER
respectivamente. El búfer combinado se muestra a continuación (ver captura de pantalla).Atajos de teclado
También puede navegar al búfer combinado
other-window
y editar manualmente en caso de que resolver un conflicto sea más complicado que aceptar una versión. Cuando haya terminado, puede guardar el búfer y salir de Emacs como de costumbre. Para obtener más ayuda, solo use ?durante laediff
sesión, hay un montón de comandos muy útiles allí. ¡Todavía no sé qué hacen la mitad de ellos!fuente
C-x v <
, aunque en la práctica es más probable que lo invoque con Magit (según el comentario de wvxvw).vc-resolve-conflict
es un alias parasmerge-ediff
, que como su nombre indica comienza una sesión de Ediff, no una sesión de Emerge. Por cierto, el encabezado de la bibliotecaediff.el
reconoceemerge.el
la influencia de s y luego continúa diciendo "La versión actual de Ediff reemplaza a Emerge. Proporciona una interfaz de usuario superior y tiene numerosas características principales que no se encuentran en Emerge. En particular, puede hacer parches, y Operaciones de comparación, fusión y directorio de archivos de 2 y 3 vías ".magit-ediff-resolve
(Em
oe
en un archivo con conflictos) utilizasmerge-ediff
internamente. Sin embargo, anula elediff-quit-hook
para proporcionar una experiencia de finalización de sesión ligeramente mejor. En lugar de decirle que puede guardar "el búfer" (hay varios búferes), le pregunta si desea guardar el búfer (mientras le muestra su nombre).Si utiliza Spacemacs, le recomiendo activar "smerge-transient-mode", que muestra un menú de hidra con todos los comandos de smerge posibles.
Para hacer eso, simplemente llame a Mx
spacemacs/smerge-transient-state/body
, que por defecto está asignado aSPC-g-r
.Aquí hay una captura de pantalla:
Editar su archivo debería ser intuitivo:
n
para ir al siguiente trozo.fuente