Проблема с git + DiffMerge на OS X - PullRequest
8 голосов
/ 14 декабря 2010

Я настроил Sourcegear DiffMerge в качестве моего инструмента git merge по умолчанию, используя следующие инструкции:

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd "diffmerge \"\$LOCAL\" \"\$REMOTE\""

git config --global merge.tool diffmerge
git config --global mergetool.diffmerge.cmd "diffmerge --merge --result=\"\$MERGED\"
\"\$LOCAL\" \"\$BASE\" \"\$REMOTE\""
git config --global mergetool.diffmerge.trustexitcode false

Источник: http://www.andrejkoelewijn.com/wp/2010/01/08/configure-diffmerge-with-git/

Однако, когда я запускаю git mergetool, я получаю следующую ошибку:

DiffMerge Error

В чем может быть причина этой проблемы?

1 Ответ

8 голосов
/ 18 апреля 2011

Возможно, что файла $BASE не будет, если, например, два объединяемых файла не имеют общего предка или если вы столкнулись с конфликтом при применении или перебазировании патча вместо слияния ветвей.В этом случае, хотя переменная $BASE все еще будет установлена, там не будет никакого файла.

В вашей команде mergetool вам нужно проверить, существует ли $BASE, и выполнить слияние без общего предка, если это не так.Похоже, DiffMerge не поддерживает этот режим (он поддерживает объединение двух файлов без общего предка, но всегда записывает вывод в один из файлов, а не в файл результатов).Вместо этого вам нужно вместо этого передать $LOCAL как файл $BASE, если $BASE не существует:

git config --global mergetool.diffmerge.cmd 'diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"'
...