適切なツールが拡張に基づいて選択されるように、複数のgit mergetoolとdifftoolの設定

StackOverflow https://stackoverflow.com//questions/25069455

質問

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
.

呼び出し時に正しい差分とマージツールを選択します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top