Git difftool no lanza el progtwig externo DiffMerge

He estado siguiendo las instrucciones en el enlace " input de blog de Dave " en esta respuesta, ya que estoy en Windows 7 y uso la herramienta DiffMerge de SourceGear. He agregado el directory git\cmd a mi variable de sistema PATH y coloqué mi file git-diff-diffmerge-wrapper.sh allí:

 #!/bin/sh "C:\Program Files\SourceGear\Common\DiffMerge\sgdm.exe" "$1" "$2" | cat 

(Sí, es la ruta correcta para DiffMerge).

He editado mi file .gitconfig para include los fragments diff y difftool (copié las líneas directamente de la publicación, y él se va en la línea #external comentada. Lo agregué al final de mi file; ¿OKAY? )

 [diff] # external = git-diff-wrapper.sh tool = diffmerge [difftool "diffmerge"] cmd = git-diff-diffmerge-wrapper.sh "$LOCAL" "$REMOTE" 

Así que voy a git bash y hago git difftool HEAD~ 67b8679 -- js/site/pizzabuilder.js y git difftool HEAD~ 67b8679 -- js/site/pizzabuilder.js enter. No pasa nada. Si hago git difftool HEAD~ 67b8679 , dejando el file que quiero, obtengo esto:

 Viewing: 'js/angular/hutlovers/hutlovers.js' Launch 'diffmerge' [Y/n]: Y C:\Program Files (x86)\Git/libexec/git-core/mergetools/defaults: line 17: git-diff-diffmerge-wrapper.sh: command not found Viewing: 'js/angular/localization/StoreListCtrl.js' Launch 'diffmerge' [Y/n]: n Viewing: 'js/pizzahut/site/browser_version.js' Launch 'diffmerge' [Y/n]: n Viewing: 'js/pizzahut/site/dashboard.js' Launch 'diffmerge' [Y/n]: n 

Continúa para todos los files que son diferentes entre las confirmaciones, pero nunca inicia DiffMerge. No sé cómo interpretar el error; qué command no se encuentra? difftool ? Estoy ejecutando 1.7.11 en git, y difftool supuestamente está incluido con git comenzando con la versión 1.6.3.

Cuando miro la línea 17 del file al que se hace reference en el error, esto es lo que hay allí:

 ( eval $merge_tool_cmd ) 

como parte de este bloque:

 diff_cmd () { merge_tool_cmd="$(get_merge_tool_cmd "$1")" if test -z "$merge_tool_cmd" then status=1 break fi ( eval $merge_tool_cmd ) status=$? return $status } 

¿Puede alguien ayudarme? Soy un usuario diario de git , pero apenas un usuario avanzado, y no sé nada sobre los scripts de shell de Windows, por lo que seguir las instrucciones en ese post es prácticamente el límite de mi conocimiento en este momento.

DiffMerge

No estoy seguro si esto ayuda, pero esta es mi configuration para difftool con DiffMerge. Tenga en count que estoy usando msysgit Bash (no estoy seguro de si será diferente para los usuarios de Cygwin o PoshGit):

 [diff] tool = dm [difftool "dm"] cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\" 

Actualmente estoy usando Git 2.0, pero parece recordar haber configurado esto con Git 1.8.x o incluso desde Git 1.7.x, así que pruébalo y ve si funciona.

Bonus con Beyond Compare 3 Pro

De hecho, hago la mayor parte de mi diferencia en Windows hoy en día con Beyond Compare 3 Pro , aunque a veces seguiré usando DiffMerge. Aquí están todas mis configuraciones de difftool si quiere hacer el cambio:

 [merge] tool = bc3 [diff] tool = bc3 [difftool "dm"] cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\" [difftool "bc3"] cmd = "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\"" [mergetool "bc3"] cmd = "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"" 

Me parece que el problema es que la ruta que usa git bash no es la que usa Windows. Lo comprobé ejecutando env | grep PATH env | grep PATH desde dentro de git bash .

Entiendo que no quiere meterse con la installation de git, por lo que le sugiero que brinde la ruta completa a su envoltorio.

Tienes que darlo usando el formatting cygwin. ¿Como hacer eso?

1) Ve al lugar donde tienes el contenedor y ejecuta allí Git Bash .

Paso 1

2) En la window de Git Bash , escriba pwd , que le mostrará el directory de trabajo actual. Haga clic derecho en el título de la window y select Marcar . Con el mouse, selecciona la ruta (en mi caso es /C/Users/lpiepiora/cmds y presiona Enter .

Paso 2

3) Ahora edite su .gitconfig y agregue la ruta copyda a él (tiene que agregar una barra al final de la ruta copyda).

Paso 3

Después de esos pasos, debería poder iniciar su herramienta de fusión.

PD. Es posible que desee cambiar su git-diff-diffmerge-wrapper.sh por algo git-diff-diffmerge-wrapper.sh , para manejar files eliminados / agregados correctamente, como se sugirió en una respuesta a otra pregunta .

 #!/bin/sh NULL="/dev/null" if [ "$2" = "$NULL" ] ; then echo "removed: $1" elif [ "$1" = "$NULL" ] ; then echo "added: $2" else echo "changed: $3" "C:\Program Files\SourceGear\Common\DiffMerge\sgdm.exe" "$1" "$2" | cat fi 

Ninguna de las otras respuestas funcionó para mí. Finalmente conseguí diffmerge para trabajar en Windows 7,8,10 usando Git 2.6.3, 2.7.0

1) Asegúrese de que puede escribir y usar su .gitconfig global almacenado en ~ / .gitconfig, que es relativo a su ruta HOME.

Utilizar:

 git config --global --edit 

o simplemente navegue hasta el file en un explorador de Windows y edítelo de esa manera.

La variable HOME se puede configurar navegando a variables de entorno dentro de Windows (para 7, haga clic con el button derecho en Equipo -> Propiedades -> Configuración avanzada del sistema -> Variables de entorno).

2) Asegúrate de que la diffmerge esté en tu variable PATH en tu máquina. Esto está en el mismo lugar que la variable HOME. Agregué esto a mi RUTA:

 C:\Program Files\SourceGear\Common\DiffMerge; 

3) Para hacer diffmerge el valor pnetworkingeterminado, agregue lo siguiente a su file global .gitconfig:

 [merge] tool = diffmerge [mergetool] prompt = true [mergetool "diffmerge"] path = C:\\Program Files\\SourceGear\\Common\\DiffMerge\\sgdm.exe 

'\' es un personaje de escape

repito para difftool cosas y eso es todo lo que necesitaba para que funcione. No se necesita script de contenedor o variables remotas locales.