Как настроить DiffMerge для работы с Git в Windows 7 или Windows 2012?

Итак, я видел несколько вопросов о том, чтобы DiffMerge был mergetool и difftool для git. По сути дело сводится к тому, что DiffMerge (sgdm.exe) в ваших PATH и a .gitconfig выглядит следующим образом:

[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

Когда я запускаю git difftool file1 file2, ничего не происходит. Нет кода ошибки, без запуска DiffMerge. Из Git Bash и командной строки Windows я могу запустить sgdm file1 file2, и появляется DiffMerge.

Я изменил cmd в .gitconfig, чтобы не иметь путь или расширения (например, sgdm), но все же безрезультатно.

Кто-нибудь сталкивался с этим? Есть некоторые очевидные вещи, которые мне не хватает? Я чувствую, что мне не хватает чего-то очевидного.

Ответ 1

My .gitconfig для использования SourceGear DiffMerge:

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

(Очевидно, flip $LOCAL и $REMOTE, если вы предпочитаете их с другой стороны.)

Ответ 2

Это сработало хорошо для меня довольно долгое время. (Windows 7, последняя версия Git.)

Убедитесь, что файл sgdm.exe находится в пути к среде.

[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

Ответ 3

Это помогло мне:

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\""

Ответ 4

Эта конфигурация работает для меня с Git 1.7.9 и Windows 7 64 бит. Отправной точкой является книга Pro Git http://git-scm.com/book/en/Customizing-Git-Git-Configuration. Изменения для Windows vs Mac были: a) для diff, просто заменяя/на\\и помещая кавычки вокруг пути, содержащего пробел; b) для слияния параметров такие же, как ваши, но с кавычками. Таким образом:

.gitconfig

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

Два файла script, которые находятся на вашем PATH

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"

Ответ 5

Это сделало это для меня, когда никто другой не сделал:

[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