Pregunta

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

Encontré algunos recursos en la red:

  • En el sitio Araxis , mencionan un " fácil " pero implica un ejecutable (araxisgitdiff.exe y araxisgitmerge.exe) que no forma parte de mi distribución.
  • También encontré información en gitguru , pero la información real acerca de: Araxis es escasa en el mejor de los casos, y no pude sacar nada de eso.
  • Finalmente, hubo información sobre un stackoverflow post , pero el método sugerido no funciona para mí. Esa información en particular estaba orientada hacia OS X. I " traducido " a Windows lo mejor que pude, pero sin éxito:

Creé /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
  se apagó el diff externo, parando en PowerEditor / src / Notepad_plus.cpp.


Editar:

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


Editar:

Descubrí que se puede configurar fácilmente si usas TortoiseGit, pero parece manejar el diff por sí mismo y ninguna configuración de TortoiseGit da ninguna indicación de cómo configurar Araxis como una herramienta de combinación cuando se invoca diff desde el línea de comando.


Editar:

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

¿Fue útil?

Solución

Si desea que 'git diff' use siempre araxis, puede usar las instrucciones del archivo de ayuda, pero si quiere tener el control para usar 'git diff' como lo haría normalmente desde la línea de comandos y 'git difftool 'para involucrar a la GUI de Araxis.

Intenta agregar lo siguiente a tu git config ::

[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

Otros consejos

La documentación en araxis se ha actualizado: http: //www.araxis.com/merge/documentation-windows/integrating-with-other-applications#Git

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

Bien ... lo tengo funcionando, con la versión 1.6.3.2.1299.gee46c de msysgit, bajo DOS o Git Bash, con una licencia de evaluación para Araxis Merge 2009, v2009.3713:

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

Primero, configuremos algunos scripts para esas herramientas de diferenciar y fusionar

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 al script de Git git-difftool - helper , usaré difftool incluso cuando escriba ' git diff '.
  • no olvide pasar $ MERGED a su secuencia de comandos de difftool: esa es la única variable con el nombre real del archivo que se difunde. $ LOCAL y $ REMOTE son nombres temporales.

Para la herramienta de combinació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 establecer 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 el diff Configuración de .tool o merge.tool .

Cree difftool.sh y mergetool.sh en un directorio al que hace referencia su variable de entorno global PATH . Funcionará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 el título sin espacio funciona ... así que, por ahora, pruébalo sin ningún 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 " ' '" comillas combinaciones (las comillas dobles desaparecerán durante la ejecución del script de shell, dejando las comillas simples, ¡permitiendo espacios dentro de un título!)
  • $ 3 representa el nombre real y no un nombre de archivo temporal para fines diferenciales. 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 sesión de DOS: solo git diff " HEAD ^ " HEAD lo 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 involucran múltiples archivos (múltiples diferencias, múltiples archivos a fusionar).
Lo probé: funciona, y Araxis compare.exe abre una pestaña por archivo para diferenciar o fusionar.
Pruébelo y háganoslo saber;)

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

Desafortunadamente, debido a la forma en que la variable de configuración se expande y se evalúa, su cadena debe ser un comando de shell válido que luego se escapa de 'git config'.

Prueba 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 en los que 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"'

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

[merge]
    tool = araxis

en su .gitconfig . También tiene que incluir la carpeta Araxis en su variable de entorno PATH (MSYSGit busca Compare.exe ).

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

En cualquier caso, si está interesado en cómo MSYSGit iniciará su fusión de Araxis, o si se pregunta qué otras herramientas mergetools admite fuera de la caja, el lugar que debe buscar es \ share \ git-gui \ lib \ mergetool.tcl en su carpeta de instalación MSYSGit.

PS. 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. De todos modos, uso Araxis Merge desde la línea de comandos.
  2. La especificación de la ruta del directorio en .gitconfig (especialmente la que le gusta " C: \ Archivos de programa \ Araxis \ Araxis Merge \ " , que contiene espacios) puede probar difícil de hacer correctamente, ya que es propenso a problemas de barra invertida / barra de forwards, que afectan a MSYSGit.

PPS. Todo lo anterior se aplica a hacer de Araxis tu diftool, también. Es decir, necesitas agregar

[diff]
    tool = araxis

y elimine cualquier otra cosa en la sección [difftool " araxis "] , si la tiene en su configuración (no olvide configurar PATH).

Puede intentar seguir el secuencia de comandos mencionada en Mi respuesta sobre diffMerge (para Windows) y ver si funciona.

La ruta ejecutable podría expresarse mejor con:

#!/bin/sh

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

Encontré una forma de 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 diferenciarse de la línea de comandos.

Desde que he sido mordido por git diferenciales / fusiones personalizadas, pensé que trataría de solucionar este problema de una vez por todas. Llegué al punto donde comenzó AraxisMerge, pero sin los títulos de las pestañas. Así que se dejará 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. Entonces esa sería la opción # 1: actualizar la combinación araxis.
  • Ya que estoy trabajando desde CMD.EXE, 'git diff HEAD HEAD ^' no funciona. El '^' debe escaparse a 'git diff HEAD " HEAD ^ "'.
  • Para mi propio trabajo, uso kdiff3 como reemplazo gratuito en Windows que funciona razonablemente bien (ayuda a que git lo admita de forma predeterminada)

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

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

external = "git-diff-driver.sh"

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

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

¡Buena suerte!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top