適切なツールが拡張に基づいて選択されるように、複数のgit mergetoolとdifftoolの設定
-
26-12-2019 - |
質問
git difftoolを実行すると、再帰的にすべてのファイルのデフォルトのdifftoolが実行されます。拡張子に基づいて適切なDIFFTOOLを選択するためのスクリプトを書いて、スクリプト内のgit difftool -t mytoolのように呼び出します。Difftoolはすべての引数を新しい呼び出しにリダイレクトします。ただし、どういうわけかすべてのファイル名もリダイレクトされます。そのように基本的に、カスタムディフツールは変更されたすべてのファイルで渡されるため、私のスクリプトは無駄になります。
私が何をしたいのか、difftoolを1つのファイルに制限するか、少なくとも1つのファイルでdiftoolを呼んでください。基本的に、これは私のスクリプトであり、これは.gitconfigのデフォルトのDifftoolとしてあります。
if is_sbs $1 $2 ; then
#custom difftool which is also defined in .gitconfig
git dt -t rhapsody
else
#for all files
git dt -t kdiff3
fi
. 解決
明らかに、Gitは本質的にすべてのファイル情報を配管し、それはスクリプトへの引数には示されていません。他の差分ツールを「DIFFTOOL」と定義するのではなく、.gitConfigでは、適切な引数を指定して実行可能ファイルに電話をかけました。完全な解決策は次のとおりです。
.gitconfig
[difftool]
prompt = false
[mergetool]
prompt = false
[difftool "selectiveDiff"]
cmd = difftool.sh $LOCAL $REMOTE $BASE $MERGED
keepBackup = false
[mergetool "selectiveMerge"]
cmd = mergetool.sh $LOCAL $REMOTE $BASE $MERGED
keepBackup = false
.
スクリプトがパスにあるべきであることに注意してください。ディレクトリを作成してパスに追加したり、すでにパスに入っているものを使用したりします。
どこかで変数を定義する
RHAPSODY_PATH="C:/Program Files (x86)/IBM/Rational/Rhapsody/8.0.5/DiffMerge.exe"
KDIFF3_PATH="C:/Program Files/KDiff3/kdiff3.exe"
.
difftool.sh
if is_sbs $1 $2 ; then
"$RHAPSODY_PATH" -base $3 $1 $2 -xcompare
else
"$KDIFF3_PATH" $1 $2
fi
.
mergetool.sh
if is_sbs $1 $2 ; then
#DiffMerge.exe -base BASE FILE1 FILE2 -out OUTPUT -xmerge
"$RHAPSODY_PATH" -base $3 $1 $2 -out $4 -xmerge
else
#kdiff3 BASE FILE1 FILE2 -o OUTPUT
"$KDIFF3_PATH" $3 $1 $2 -o $4
fi
.
呼び出し時に正しい差分とマージツールを選択します。
所属していません StackOverflow