Возможно, что файла $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"'