Cómo configurar Araxis como herramienta de diff / merge para MSYS git?

Estoy tratando de usar Araxis Merge como mi herramienta diff / merge para MSYSGit.

Encontré algunos resources en la networking:

  • En el sitio de Araxis , mencionan una manera "fácil", pero implica un ejecutable (araxisgitdiff.exe y araxisgitmerge.exe) que no forman parte de mi distribución.
  • También encontré algo de información en gitguru , pero la información real es: Araxis es escaso en el mejor de los casos, y no pude sacar nada de eso.
  • Finalmente, había algo de información en una publicación stackoverflow anterior, pero el método sugerido no funciona para mí. Esa información particular se orientó hacia OS X. Me "traduje" a Windows lo mejor que pude, pero sin éxito:

/bin/git-diff-driver.sh

 #!/bin/sh "/c/Program Files/Araxis/Araxis Merge/compare.exe" -title1:"$1 (repo version)" -title2:"$1 " -max "$2" "$5" 

y editado gitconfig

 [merge] tool = araxismerge [mergetool "araxismerge"] cmd = "/c/Program Files/Araxis/Araxis Merge/compare.exe" -3 -merge -wait $LOCAL $BASE $REMOTE $MERGED [diff] external = "/bin/git-diff-driver.sh" 

y el único resultado que obtengo es:

$ git diff HEAD ^ HEAD
la diferencia externa murió y se detuvo en PowerEditor / src / Notepad_plus.cpp.


Editar:

También he intentado con el exe llamado "c:/Program Files/Araxis/Araxis Merge/compare.exe" como lo sugiere una de las respuestas, con los mismos resultados.


Editar:

Descubrí que se puede establecer fácilmente si usa TortoiseGit, pero parece manejar diff por sí mismo y ninguna configuration de TortoiseGit da ninguna indicación sobre cómo configurar Araxis como una herramienta de fusión cuando se invoca diff desde la línea de command.


Editar:

Entonces, la pregunta es: ¿hay alguien que utilice con éxito Araxis Merge para diferir y fusionar cosas con MSYSGit, y si es así, cómo lo hace?

Si quiere tener 'git diff', siempre use araxis, puede usar las instrucciones en el file de ayuda, pero si quiere tener control, use 'git diff' como lo haría normalmente desde la línea de command y 'git difftool' para activar la GUI de Araxis.

Intente agregar lo siguiente a su configuration de git ::

 [difftool "araxis"] path = "/c/Program Files/Araxis/Araxis Merge/compare.exe" renames = true trustExitCode = true [diff] tool = araxis stat = true [mergetool "araxismergetool"] cmd = 'C:\\Program Files\\Araxis\\Araxis Merge\\araxisgitmerge.exe' "$REMOTE" "$BASE" "$PWD/$LOCAL" "$PWD/$MERGED" trustExitCode = false [mergetool] keepBackup = false [merge] tool = araxismergetool stat = true 

La documentation en araxis ha sido actualizada: http://www.araxis.com/merge/documentation-windows/integrating-with-other-applications#Git

Puedo usar la configuration que se muestra allí sin ninguna modificación.

Correcto … Lo hice funcionar, con msysgit versión 1.6.3.2.1299.gee46c, bajo DOS o Git Bash, con una licencia de evaluación para Araxis Merge 2009, v2009.3713:

El enfoque es usar el nuevo git difftool y git mergetool , en lugar de diff simple.

Primero, configuremos algunos scripts para esas herramientas diff y merge

 C:\>git config --global diff.tool adifftool C:\>git config --global diff.external git-difftool--helper C:\>git config --global difftool.adifftool.cmd "difftool.sh \"$LOCAL\" \"$REMOTE\" \"$MERGED\"" C:\>git config --global difftool.prompt false 

Notas:

  • estableciendo diff.external en la secuencia de commands de Git git-difftool--helper , usaré difftool incluso cuando escriba ' git diff '.
  • no olvide pasar $MERGED a su script difftool: esa es la única variable con el nombre real del file que se difunde. $LOCAL y $REMOTE son nombres temporales.

Para la herramienta de fusión, debe establecer los siguientes valores globales:

 C:\>git config --global merge.tool amergetool C:\>git config --global mergetool.amergetool.cmd "mergetool.sh \"$PWD/$LOCAL\" \"$PWD/$BASE\" \"$PWD/$REMOTE\" \"$PWD/$MERGED\"" C:\>git config --global mergetool.prompt false 

Al configurar esas herramientas en algunos scripts de shell, podrá cambiar las herramientas desde esos scripts.
Otro enfoque es nombrar sus herramientas ( mergetool.araxis.cmd , mergetool.winmerge.cmd , …) y especificar la herramienta correcta en la diff.tool o merge.tool .

Cree difftool.sh y mergetool.sh en un directory al que haga reference su variable de entorno global PATH . Trabajarán incluso desde DOS (y son sh – shell – scripts)

difftool.sh

 #!/bin/sh echo Launching Araxis Merge.exe: $3 t1="'$3 (from)'" t2="'(to)'" "C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -nowait -2 -title1:${t1} -title2:${t2} "$1" "$2" 

Notas:

  • Imposible tener -title1: "someTitle With Space" … solo funciona el título sin espacio …, así que por ahora, pruébelo sin ninguna opción ' titleN '.
    ¡Lo tengo! No puede pasar el valor del título directamente a la opción -title , debe establecerlo en una variable local, con combinaciones de comillas "' '" (las comillas dobles desaparecerán durante la ejecución del script de shell, dejando las comillas simples, permitiendo espacios dentro ¡un título!)
  • $3 representan el nombre real y no un nombre de file temporal para fines específicos. De ahí el uso de $3 dentro de la opción title1 , con espacio en ella.
  • git diff HEAD^ HEAD no funcionaría en la session DOS: solo git diff "HEAD^" HEAD haría.

mergetool.sh

 #!/bin/sh # Passing the following parameters to mergetool: # local base remote merge_result alocal=$1 base=$2 remote=$3 result=$4 t1="'$4 (current branch)'" t2="'(common ancestor)'" t3="'(to be merged)'" if [ -f $base ] then "C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -wait -merge -3 -a2 -title1:${t1} -title2:${t2} -title3:${t3} "$alocal" "$base" "$remote" "$result" else "C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -wait -merge -3 -a2 -title1:${t1} -title2:${t2} -title3:${t3} "$alocal" "$result" "$remote" "$result" fi 

No estoy seguro de que esos scripts funcionen correctamente cuando se trata de varios files (múltiples diffs, múltiples files para fusionar).
Acabo de probarlo: funciona, y Araxis compare.exe abre una pestaña por file para diferenciar o fusionar.
Pruébalo y avísanos;)

Creo que debes ser un poco más cuidadoso con tu escape en tu .gitconfig.

Desafortunadamente, debido a la forma en que se expande y evade la variable de configuration, su cadena necesita ser un command de shell válido que luego es 'git config' escapado.

Pruebe algo como esto:

 [mergetool "araxismerge"] cmd = \"/c/Program Files/Araxis/Araxis Merge/compare.exe\" -3 -merge -wait \"$LOCAL\" \"$BASE\" \"$REMOTE\" \"$MERGED\" 

Sí, no es muy bonito, lo sé. Es uno de los casos donde usar git config directamente es realmente más fácil.

 git config --global mergetool.araxismerge.cmd '"/c/Program Files/Araxis/Araxis Merge/compare.exe" -3 -merge -wait "$LOCAL" "$BASE" "$REMOTE" "$MERGED"' 

Podría intentar seguir el guión mencionado en mi respuesta sobre diffMerge (para Windows) y ver si funciona.

La ruta ejecutable podría expressse mejor con:

 #!/bin/sh "C:/Program Files/Araxis/Araxis Merge/compare.exe" -title1:"$1 (repo version)" -title2:"$1 " -max "$2" "$5" 

Una manera que encontré para hacerlo "simplemente" es instalar TortoiseGit y configurar las herramientas diff / merge en las opciones de TortoiseGit.
Sin embargo, esto no soluciona el problema si desea diferenciar de la línea de command.

Desde que me mordieron las diferencias / fusiones de git personalizadas, pensé que intentaría arreglarlo de una vez por todas. Llegué al punto donde comenzó AraxisMerge, pero sin los títulos de las tabs. Entonces eso quedará como un ejercicio para el lector 🙂

Observaciones y comentarios:

  • No tenía AraxisMerge, así que lo descargué y obtuve una licencia de evaluación gratuita de 30 días para probarlo. Esta versión (7.0 parece) viene con araxisgitdiff.exe, y el enlace con las instrucciones que envía funciona. Así que esa sería la opción n. ° 1: actualizar la fusión de araxis.
  • Como estoy trabajando desde CMD.EXE, 'git diff HEAD HEAD ^' no funciona. El '^' necesita ser escapado a 'git diff HEAD' HEAD ^ "'.
  • Para mi propio trabajo, uso kdiff3 como un reemploop gratuito en Windows que funciona razonablemente bien (es mejor que sea compatible con git)

Comenzar con git-diff-driver.sh me dio el mismo error. Después de cambiar la secuencia de commands para que solo contenga 'eco', esto no cambió. Entonces el error es independiente del contenido del script.

Luego eliminé la parte '/ bin' de .gitconfig, por lo que la línea se convierte

 external = "git-diff-driver.sh" 

… y esto comenzó a funcionar: comenzó la fusión, pero no escapa correctamente a la parte '(repo)'. Como solución, lo hice funcionar sin los títulos con:

 #!/bin/sh "/c/Program Files/Araxis/Araxis Merge/compare.exe" -max "$2" "$5" 

¡Buena suerte!

Luché con este problema por bastante time, y ahora finalmente puedo decir que todos los hacks sucios sugeridos (como los scripts de shell intermedios) son bastante innecesarios = D. La cosa es que todas las últimas versiones de MSYSGit (tengo 1.6.4) soportan Araxis Merge (tengo 2008) fuera de la caja. No es una sorpresa, que internamente se llama "araxis". Entonces, todo lo que necesitas es establecer

 [merge] tool = araxis 

en tu .gitconfig . También debe include la carpeta Araxis en su variable de entorno PATH (MSYSGit busca Compare.exe ).

Para una buena medida, todas las otras configuraciones de Git relacionadas con mergetool "araxis", que podría haber configurado (especialmente, si elige exactamente ese nombre, como lo hicieron algunas personas en esta página), deberían eliminarse todas. Eso incluye todo en la sección [mergetool "araxis"] . Asegúrese de eliminarlos de todas las configuraciones (sistema, global y repository); de lo contrario, podrían interferir con el comportamiento normal de la "herramienta interna".

En cualquier caso, si está interesado en cómo MSYSGit iniciará su fusión de Araxis, o si se preguntará qué otras herramientas de mezcla admite de la caja, el lugar para search es el script \share\git-gui\lib\mergetool.tcl en su MSYSGit carpeta de installation.

PD. Es posible que pueda evitar configurar la variable de entorno PATH configurando mergetool.araxis.path en .gitconfig . Personalmente, nunca me molesté en hacerlo, ya que

  1. Yo uso Araxis Merge desde la línea de command de todos modos.
  2. La especificación de la ruta del directory en .gitconfig (especialmente la como "C:\Program Files\Araxis\Araxis Merge\" , que contiene espacios) puede resultar difícil de realizar correctamente, ya que es propensa a problemas de barra diagonal inversa / rebobinado, que afectan a MSYSGit .

PPS. Todo lo anterior se aplica a hacer de Araxis su difftool también. Es decir, debe agregar

 [diff] tool = araxis 

y elimine todo lo demás en la [difftool "araxis"] , si lo tiene en su configuration (sin embargo, no olvide configurar PATH).