web-dev-qa-db-ja.com

p4mergeエラー[GIT]

Gitでp4mergeを使用しようとしていますが、次のようになります。

p4mergeの開始エラー: "path/myFile"は無効なファイルです(または無効なファイルを指しています)(これには、ファイルのBASE、LOCAL、REMOTE、および標準バージョンが一覧表示されます)。

Gitは競合について教えてくれ、設定されたmergetool(p4merge)を開始するかどうかを尋ねられ、上記のエラーが発生します。

追記:どのファイルでも発生します!

これが何であるか、そしてそれを修正する方法についての手がかりはありますか?

28
JohnIdol

これは、Windows7でmsysGitを使用して私のために機能しました:

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

理由はわかりませんが、引用は私にとって物事を台無しにしました。

39
Mike Glenn

ここを参照 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が存在しない場合を考慮に入れることができます。
(ファイルが2つの異なるブランチで作成されてからマージされる場合、そのファイルに共通の祖先はありません)

#!/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.tool名の名前として「merge」を使用する(実際のツールはmerge.shスクリプトで呼び出されるため、任意の数のマージツールを切り替えることができます)
  • スクリプト内での$base$alocal$remote$resultの前後の二重引用符の使用
  • 「ベース」ファイルの存在に基づいて、ツールを呼び出すための条件付きパス。
  • パラメータとしてマージするために常に3つのファイルが必要です(「base」が存在しない場合でも...)

テストしたばかりです(他のP4製品がインストールされていない場合でも、 p4mergeのみをダウンロードしてインストールする -セクションクライアント/ビジュアルマージツール-が可能です)。

上記の設定では、MSysGit1.6.3、DOSセッションまたはGitbashセッション:
それはうまくいくTM


更新msysgit 1.7.x

Benjol コメントでの言及:

p4mergeがmsysgitによってネイティブにサポートされるようになりました。

これは、次のことができることを意味します。

git config --global merge.tool p4merge
# and I recommend 
git config --global mergetool.keepBackup false
8
VonC