質問

git で p4merge を使用しようとしていますが、次の結果が得られます。

p4merge の起動中にエラーが発生しました:「path/myFile」は無効なファイルです (または無効なファイルを指します) (これには、ファイルの BASE、LOCAL、REMOTE、および標準バージョンがリストされます)。

Git は競合について通知し、設定されたマージツール (p4merge) を開始するかどうかを尋ねます。その後、上記のエラーが表示されます。

追記:どのファイルでも起こります。

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

役に立ちましたか?

解決

これは、Windows 7上でmsysGitを使用して、私のために働いてます:

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

テストしてみました(実際にできることがわかりました) p4mergeのみをダウンロードしてインストールします -- セクション「クライアント/ビジュアル マージ ツール --」 (他の P4 製品がインストールされていない場合でも)。

上記の設定、MSysGit1.6.3、DOS セッションまたは Git bash セッションを使用すると、次のようになります。
それはちょうどうまくいきますTM.


アップデート msysgit 1.7.x

ベンジョール コメントでの言及:

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

つまり、次のようにするだけで済みます。

git config --global merge.tool p4merge
# and I recommend 
git config --global mergetool.keepBackup false
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top