Desde Git1.6.3, puede usar el script git difftool : vea mi respuesta a continuación .
Puede ser que este artículo te ayude. Aquí están las mejores partes:
Hay dos formas diferentes de especificar una herramienta diff externa.
El primero es el método que utilizó, estableciendo la variable GIT_EXTERNAL_DIFF. Sin embargo, se supone que la variable apunta a la ruta completa del ejecutable. Además, el ejecutable especificado por GIT_EXTERNAL_DIFF se llamará con un conjunto fijo de 7 argumentos:
path old-file old-hex old-mode new-file new-hex new-mode
Como la mayoría de las herramientas diff requerirán un orden diferente (y solo algunos) de los argumentos, lo más probable es que tengas que especificar un script envoltorio, que a su vez llama a la herramienta diff real.
El segundo método, que prefiero, es configurar la herramienta externa diff a través de "git config" . Aquí esta lo que hice:
1) Cree un script de contenedor "git-diff-wrapper.sh" que contenga algo como
-->8-(snip)--
#!/bin/sh
# diff is called by git with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode
"<path_to_diff_executable>" "$2" "$5" | cat
--8<-(snap)--
Como puede ver, solo los argumentos segundo ("archivo antiguo") y quinto ("archivo nuevo") se pasarán a la herramienta diff.
2) Tipo
$ git config --global diff.external <path_to_wrapper_script>
en el símbolo del sistema, reemplazando con la ruta a "git-diff-wrapper.sh", por lo que su ~ / .gitconfig contiene
-->8-(snip)--
[diff]
external = <path_to_wrapper_script>
--8<-(snap)--
Asegúrese de utilizar la sintaxis correcta para especificar las rutas de acceso al script de envoltura y la herramienta de diferencias, es decir, utilice barras diagonales en lugar de barras diagonales inversas. En mi caso, tengo
[diff]
external = \"c:/Documents and Settings/sschuber/git-diff-wrapper.sh\"
en .gitconfig y
"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat
en el script de envoltura. ¡Cuidado con el "gato" final!
(Supongo que ' | cat
' es necesario solo para algunos programas que pueden no devolver un estado de retorno adecuado o consistente. Es posible que desee probar sin el gato final si su herramienta diff tiene un estado de retorno explícito)
( Diomidis Spinellis agrega en los comentarios :
El cat
comando es obligatorio porque diff(1)
, por defecto, sale con un código de error si los archivos difieren.
Git espera que el programa diff externo salga con un código de error solo si ocurrió un error real, por ejemplo, si se queda sin memoria.
Canalizando el resultado de git
que cat
el código de error no nulo está enmascarado.
Más eficientemente, el programa podría ejecutarse exit
con un argumento de 0).
Esa (el artículo citado anteriormente) es la teoría de la herramienta externa definida a través del archivo de configuración (no a través de la variable de entorno).
En la práctica (aún para la definición del archivo de configuración de la herramienta externa), puede consultar: