¿Es posible usar winmerge para ver git diffs de cygwin?

Me gusta usar git en cygwin, pero el único inconveniente que tengo es que cuando quiero git difftool no puedo usar nada útil. git diff está bien para mí la mayor parte del time, pero a veces me gustaría usar winmerge para ver estos diffs a través de git difftool ¿hay alguna forma de configurar esto?

Para cygwin, la pregunta de SO " ¿Cómo puedo configurar Mercurial para usar WinMerge para fusiones, bajo cygwin? " Se puede aplicar a git (al combinar el siguiente script winmerge con la pregunta anterior " use Winmerge dentro de Git para file diff ")

 #!/bin/sh "/cygdrive/c/Program Files/WinMerge/WinMergeU.EXE" /e /ub /dl other /dr local `cygpath -aw $1` `cygpath -aw $2` `cygpath -aw $3` 

Proceso

Tiene más detalles en este artículo " Git + WinMerge + Cygwin " (de Thiru Thirunavukarasu ):
(Pero aún recomendaría las opciones de WinMergeU.exe de arriba)

Agregue las siguientes líneas a su file .gitconfig:

  [diff] tool = winmerge [difftool "winmerge"] cmd = git-difftool-winmerge-wrapper.sh \"$LOCAL\" \"$REMOTE\" [difftool] prompt = false 

La última opción ( prompt = false ) es opcional. Puede omitirlo si desea que Git le solicite antes de abrir cada diff.

Crea un file llamado git-difftool-winmerge-wrapper.sh y git-difftool-winmerge-wrapper.sh en tu path.
Acabo de dejarlo en mi directory de inicio. Puede cambiar la ruta pnetworkingeterminada de Cygwin para include su directory de inicio modificando el file .bash_profile (también en su directory de inicio) y agregando PATH=${PATH}:${HOME}

Agregue lo siguiente a git-difftool-winmerge-wrapper.sh :

  #!/bin/sh echo "Launching WinMergeU.exe \"$(cygpath -aw "$1")\" \"$(cygpath -aw "$2")\"" if [ -f "$1" -a -f "$2" ] then "C:/Program Files (x86)/WinMerge/WinMergeU.exe" -e -u -wl -dl "Base" -dr "Mine" "$(cygpath -aw "$1")" "$(cygpath -aw "$2")" else echo "skipping as one file doesn't exist" fi 

(De nuevo, haga algunas testings con esas opciones de WinMerge)


Guiones

Si quieres ir a "todos los WinMerge", tanto para diferir como para fusionar funciones de git, tienes esta página esencial para seguir de ecerulm (Ruben Laguna) :

diffmerge-diff.sh

 #!/bin/sh # Use SourceGear DiffMerge as mergetool for git in cygwin. # git config --global mergetool.diffmerge.cmd "diffmergetool.sh \"\$LOCAL\" \"\$REMOTE\" \"\$BASE\" \"\$MERGED\"" # git config --global mergetool.diffmerge.trustExitCode false # git difftool -t diffmerge branch1..branch2 # Reference: http://www.tldp.org/LDP/abs/abs-guide.pdf library=githelperfunctions.sh #[ -f $library ] && . $library . $library echo Launching DiffMerge.exe - diffmerge-diff.sh: set_path_vars "$1" "$2" "$3" "$4" echo "$diffmergewinpath" -t1=FROM_VERSION -t2=TO_VERSION --caption=$caption $localwinpath $remotewinpath "$diffmergewinpath" -t1=FROM_VERSION -t2=TO_VERSION --caption="$caption" "$localwinpath" "$remotewinpath" 

diffmerge-merge.sh

 #!/bin/sh # Use SourceGear DiffMerge as mergetool for git in cygwin. # git config --global mergetool.diffmerge.cmd "diffmergetool.sh \"\$LOCAL\" \"\$REMOTE\" \"\$BASE\" \"\$MERGED\"" # git config --global mergetool.diffmerge.trustExitCode false # git mergetool -t diffmerge # Reference: http://www.tldp.org/LDP/abs/abs-guide.pdf library=githelperfunctions.sh #[ -f $library ] && . $library . $library echo Launching DiffMerge.exe - diffmerge-merge.sh: set_path_vars "$1" "$2" "$3" "$4" "$diffmergewinpath" --merge -t1=FROM_VERSION -t2=MERGED -t3=TO_VERSION --result="$mergedwinpath" --caption="$caption" "$localwinpath" "$basewinpath" "$remotewinpath" unix2dos "$merged" 

githelperfunctions.sh

 # Helper functions convert_path () { file=$1 if [ "$file" == '/dev/null' ] || [ ! -e "$file" ] then file="/tmp/nulla" `echo "">$file` fi echo `cygpath -w -a "$file"` } set_path_vars () { local=$1 remote=$2 base=$3 merged=$4 echo ========= Cygwin paths ======= echo "LOCAL : $local" echo "REMOTE : $remote" echo "BASE : $base" echo "MERGED : $merged" localwinpath=$(convert_path "$local") remotewinpath=$(convert_path "$remote") basewinpath=$(convert_path "$base") mergedwinpath=$(convert_path "$merged") echo ========= Win paths ======= echo "LOCAL : $localwinpath" echo "REMOTE : $remotewinpath" echo "BASE : $basewinpath" echo "MERGED : $mergedwinpath" caption=`basename "$merged"` diffmergewinpath="C:/Program Files/SourceGear/DiffMerge/DiffMerge.exe" winmergewinpath="C:/Program Files/WinMerge/WinMergeU.exe" # diffmergewinpath=`cygpath -u C:/Program Files/SourceGear/DiffMerge/DiffMerge.exe` # winmergewinpath=`cygpath -u \"C:\Program Files\WinMerge\WinMergeU.exe\"` } 

winmerge-diff.sh

 #!/bin/sh # Use winmerge as mergetool for git in cygwin. # git config --global difftool.winmerge.cmd "winmerge-diff.sh \"\$LOCAL\" \"\$REMOTE\" \"\$BASE\"" # git config --global mergetool.winmerge.trustExitCode false # git difftool -t winmerge branch1..branch2 # Reference: http://www.tldp.org/LDP/abs/abs-guide.pdf # Reference: http://winmerge.org/docs/manual/CommandLine.html library=githelperfunctions.sh #[ -f $library ] && . $library . $library echo Launching winmerge.exe - winmerge-diff.sh: set_path_vars "$1" "$2" "$3" "$4" "$winmergewinpath" /dl "LOCAL.$caption" /dr "TO_VERSION.$caption" "$localwinpath" "$remotewinpath" 

winmerge-merge.sh

 #!/bin/sh # Use winmerge as mergetool for git in cygwin. # git config --global mergetool.winmerge.cmd "winmerge-merge.sh \"\$LOCAL\" \"\$REMOTE\" \"\$BASE\" \"\$MERGED\"" # git config --global mergetool.winmerge.trustExitCode false # git mergetool -t diffmerge # Reference: http://www.tldp.org/LDP/abs/abs-guide.pdf # Reference: http://winmerge.org/docs/manual/CommandLine.html library=githelperfunctions.sh #[ -f $library ] && . $library . $library echo Launching winmerge.exe - winmerge-merge.sh: set_path_vars "$1" "$2" "$3" "$4" # -- use WinMergeU conflictFile "$winmergewinpath" "$mergedwinpath"