configuration mercurial macos filemerge

configuration - Configurando Mercurial-FileMerge para Apple Mac OS X



macos (5)

¿Cómo configuro el programa FileMerge de Apple para que funcione como la herramienta de fusión de Mercurial? Tengo mi configuración de archivo .hgrc en mi directorio de inicio y simplemente quiero configurar FileMerge como el programa de fusión.


Así es como lo arreglé:

Creado /usr/local/bin/opendiff-w lleno de:

#!/bin/sh # opendiff returns immediately, without waiting for FileMerge to exit. # Piping the output makes opendiff wait for FileMerge. opendiff "$@" | cat

Luego ejecutó el comando: sudo chmod +x /usr/local/bin/opendiff-w

Luego se editó ~/.hgrc con la siguiente adición:

[extdiff] cmd.interdiff = hg-interdiff cmd.opendiff = opendiff-w [merge-tools] filemerge.executable = /usr/local/bin/opendiff-w filemerge.args = $local $other -ancestor $base -merge $output [extensions] extdiff =

Luego ejecuté el siguiente comando para verificar si funcionó: hg opendiff

Sin embargo, recibí el siguiente error:

exception raised trying to run FileMerge: launch path not accessible

Para arreglarlo ejecuté el siguiente comando:

sudo /usr/bin/xcode-select -switch /Applications/Xcode.app/Contents/Developer/

Esto debería funcionar ahora y abrir FileMerge.

=============================================== ==================

Si usa TorsoiseHg para Mac, lo único que debe hacer ahora para trabajar con FileMerge es elegir Filemerge de las herramientas Detected merge / diff cuando aparezca la ventana Resolver conflicto y elegir Tool Resolve.

Espero que esto ayude.


Actualización: El wiki de Mercurial tiene una página sobre FileMerge . Lea eso primero.

No he intentado usar FileMerge pero una descripción general podría ayudar. La mayor parte de lo que quieres saber se describe en la página MergeProgram de la wiki de Mercurial . La versión corta es sus opciones típicas son:

Establezca la variable de entorno HGMERGE para que apunte a la herramienta de fusión que desee.

o agregue lo siguiente a su .hgrc :

[ui] merge = /path/to/toolname [merge-tools] toolname.args = $base $local $other

La clave es que una herramienta de combinación necesita tomar tres argumentos: la revisión base, sus cambios locales y los cambios de la otra rama. Utiliza la primera configuración para especificar la herramienta y la segunda para especificar cómo toma argumentos.


Como se describe en la wiki de hg , esto me ha funcionado con varias versiones de hg:

  • Cree un script en algún lugar de su $PATH , digamos en /usr/local/bin :

$ vim /usr/local/bin/opendiff-w #!/bin/sh # opendiff returns immediately, without waiting for FileMerge to exit. # Piping the output makes opendiff wait for FileMerge. opendiff "$@" | cat

  • Agregue las siguientes secciones a su ~/.hgrc :

[extdiff] cmd.interdiff = hg-interdiff cmd.opendiff = opendiff-w [merge-tools] filemerge.executable = opendiff-w filemerge.args = $local $other -ancestor $base -merge $output [extensions] extdiff =

Ahora puedes usarlo como $hg opendiff .


Ninguna de la documentación vinculada funcionó para mí sin modificaciones; finalmente, lo que terminé haciendo fue una combinación de las instrucciones oficiales y "Usar Vim como el programa de filemerge" de https://www.mercurial-scm.org/wiki/TipsAndTricks . Creé el script opendiff-w descrito en esta respuesta (aunque lo llamé hgvdiff) y puse lo siguiente en mi .hgrc:

[extdiff] cmd.interdiff = hg-interdiff cmd.opendiff = /usr/local/bin/hgvdiff [merge-patterns] ** = filemerge [merge-tools] filemerge.executable = /usr/local/bin/hgvdiff filemerge.args = $local $other -ancestor $base -merge $output filemerge.checkchanged = true filemerge.gui = true [extensions] extdiff =

Esto es moderadamente funcional, aunque a veces lleva a cabo la comprobación de si un archivo se cambió prematuramente, dando lugar a un montón de:

output file wwwroot/zoomingo/website/protected/messages/en/z.php appears unchanged was merge successful (yn)? n

cuando cierras FileMerge


No lo he intentado, pero apuesto a que debes señalar todo el camino hasta el ejecutable de FileMerge, no solo el paquete de la aplicación.

Asi que:

[ui] merge = /Developer/Applications/Utilities/FileMerge.app/Contents/MacOS/FileMerge