¿Cómo configurar DiffMerge configurado para trabajar con Git en Windows 7 o Windows 2012?

Así que he visto algunas preguntas sobre cómo hacer que DiffMerge sea el mergetool y difftool para git. Básicamente se trata de tener DiffMerge (sgdm.exe) en tu PATH y un .gitconfig que se ve así:

 [diff] tool = DiffMerge [difftool "DiffMerge"] cmd = 'C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe' "$LOCAL" "$REMOTE" [merge] tool = DiffMerge [mergetool "DiffMerge"] cmd = 'C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe' -merge -result="$MERGED" "$LOCAL" "$BASE" "$REMOTE" trustExitCode = true keepBackup = false 

Cuando ejecuto git difftool file1 file2 , no pasa nada. Sin código de error, sin lanzamiento de DiffMerge. Desde Git Bash y Windows Command Line, puedo ejecutar sgdm file1 file2 file1 file2 y aparece DiffMerge.

.gitconfig el cmd en .gitconfig para no tener una ruta o extensiones (por ejemplo, sgdm solamente), pero aún no sirvió para nada.

¿Alguien ha encontrado esto? ¿Hay algunas cosas obvias que me estoy perdiendo? Siento que me falta algo obvio.

Mi .gitconfig para usar SourceGear DiffMerge es:

 [mergetool "diffmerge"] cmd = \"C:\\program files\\sourcegear\\common\\diffmerge\\sgdm.exe\" --merge --result=$MERGED $LOCAL $BASE $REMOTE 

(Obviamente, invierta $LOCAL y $REMOTE si los prefiere del otro lado).

Esto me ha funcionado por bastante time. (Windows 7, la última versión de Git)

Asegúrese de que sgdm.exe se encuentre en la ruta del entorno.

 [diff] tool = sgdm [difftool "diffmerge"] cmd = sgdm $LOCAL $REMOTE [merge] tool = sgdm [mergetool "diffmerge"] cmd = sgdm --merge --result=$MERGED $LOCAL $BASE $REMOTE trustexitcode = false [difftool "sgdm"] cmd = sgdm $LOCAL $REMOTE [mergetool "sgdm"] trustexitcode = false cmd = sgdm --merge --result=$MERGED $LOCAL $MERGED $REMOTE --title1=Mine --title2='Merged: $MERGED' --title3=Theirs 

Esto funcionó para mí:

 C:\> git config --global diff.tool diffmerge C:\> git config --global difftool.diffmerge.cmd "C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\"" C:\> git config --global merge.tool diffmerge C:\> git config --global mergetool.diffmerge.trustExitCode true C:\> git config --global mergetool.diffmerge.cmd "C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe /merge /result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"" 

Esta configuration funciona para mí con Git 1.7.9 y Windows 7 de 64 bits. Mi punto de partida es el libro de Pro Git http://git-scm.com/book/es/Customizing-Git-Git-Configuration . Los cambios para Windows vs Mac fueron a) para diff, simplemente reemplazando / con \\ y colocando comillas alnetworkingedor de la ruta que contiene un espacio b) para fusionar los parameters son los mismos que los tuyos pero con comillas. Así:

.gitconfig

 [merge] tool = extMerge [mergetool "extMerge"] cmd = extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED" trustExitCode = false [diff] external = extDiff 

Dos files de script que están en su RUTA

extMerge

 #!/bin/sh "C:\\Program Files\\SourceGear\\Common\\DiffMerge\\sgdm.exe" "-merge" "-result=$4" "$2" "$1" "$3" 

extDiff

 #!/bin/sh [ $# -eq 7 ] && "C:\\Program Files\\SourceGear\\Common\\DiffMerge\\sgdm.exe" "$2" "$5" 

Éste lo hizo por mí cuando ninguno de los otros lo hizo:

 [core] autocrlf = false [user] email = XYZ name = ABC [merge] tool = diffmerge [mergetool "diffmerge"] trustExitCode = true cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe --merge --result=$MERGED $LOCAL $BASE $REMOTE [mergetool] keepBackup = false [difftool "diffmerge"] cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\" [diff] tool = diffmerge [push] default = matching