p4merge エラー [GIT]
質問
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