ошибка p4merge [GIT]
Вопрос
Я пытаюсь использовать p4merge с git, но получаю:
Ошибка запуска p4merge:«path/myFile» является (или указывает на) недопустимым файлом. (здесь указаны БАЗОВАЯ, ЛОКАЛЬНАЯ, УДАЛЕННАЯ и стандартная версии файла).
Git сообщает мне о конфликте, затем спрашивает, хочу ли я запустить настроенный инструмент слияния (p4merge), а затем получаю ошибку выше.
Дополнительное примечание:такое происходит с любым файлом!
Любая подсказка о том, что это такое и как это исправить?
Решение
Это сработало для меня, используя msysGit в Windows 7:
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'
Не знаю почему, но цитирование меня смутило.
Другие советы
Вы будете глянь сюда моя конфигурация для DiffMerge или KDiff3.
Исходя из этого, я бы рекомендовал для p4merge:
git config --global merge.tool merge
git config --global mergetool.merge.cmd "merge.sh \"$PWD/$LOCAL\" \"$PWD/$BASE\" \"$PWD/$REMOTE\" \"$PWD/$MERGED\""
и merge.sh
являющийся оболочкой (скопированной в каталог, на который ссылается ваш PATH
переменная среды), способная учитывать случай, когда нет BASE
существует.
(когда файл создается в двух разных ветвях, а затем объединяется, у этого файла не будет общего предка)
#!/bin/sh
# Passing the following parameters to mergetool:
# local base remote merge_result
alocal=$1
base=$2
remote=$3
result=$4
if [ -f $base ]
then
p4merge.exe -dl "$base" "$alocal" "$remote" "$result"
else
p4merge.exe -dl "$result" "$alocal" "$remote" "$result"
fi
Вы можете отметить:
- использование
PWD
в конфиге слияния - использование "
merge
" как имя файла merge.tool (поскольку сам инструмент вызывается вmerge.sh
скрипт, в котором вы можете переключаться между любым количеством инструментов слияния по вашему желанию) - использование двойных кавычек вокруг
$base
,$alocal
,$remote
,$result
внутри сценария - условный путь для вызова инструмента, основанный на существовании «базового» файла.
- необходимость всегда иметь 3 файла для объединения в качестве параметров (даже если «база» не существует...)
Только что проверил (оказывается, можно скачать и установить только p4merge -- раздел Client/Visual Merge Tool --, даже если у вас не установлен какой-либо другой продукт P4).
С настройками, описанными выше, MSysGit1.6.3, сеанс DOS или сеанс Git bash:
Это просто работаетТМ.
Обновлять msysgit 1.7.x
Бенжол упоминает в комментариях:
p4merge теперь изначально поддерживается msysgit..
Это означает, что вы можете просто сделать:
git config --global merge.tool p4merge
# and I recommend
git config --global mergetool.keepBackup false