Ошибка p4merge [GIT] - PullRequest
       66

Ошибка p4merge [GIT]

28 голосов
/ 15 мая 2009

Я пытаюсь использовать p4merge с git, но получаю:

Ошибка запуска p4merge: «путь / myFile» (или указывает на) неверный файл (в нем перечислены BASE, LOCAL, REMOTE и стандартная версия файла).

Git сообщает мне о конфликте, затем спрашивает, хочу ли я запустить сконфигурированный mergetool (p4merge), а затем я получаю ошибку выше.

Дополнительное примечание: это происходит с любым файлом!

Любая подсказка о том, что это такое и как это исправить?

Ответы [ 2 ]

39 голосов
/ 02 августа 2009

Это сработало для меня, используя msysGit на Windows 7:

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED'

Не знаю почему, но цитата облажалась для меня.

8 голосов
/ 15 мая 2009

Вы увидите здесь мой конфиг для 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 файла для объединения в качестве параметров (даже если «base» не существует ...)

Только что протестировал (оказывается, вы можете скачать и установить только 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
...