Проблема с 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
Я получаю следующую ошибку:
Что может быть причиной этой проблемы?
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"'