Проблема с git + DiffMerge на OS X

Я настроил 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

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

1 ответ

Возможно, что не будет $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"'
Другие вопросы по тегам