Как настроить 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