2

git difftool を実行すると、すべてのファイルに対してデフォルトの difftool が再帰的に実行されます。拡張子に基づいて適切な difftool を選択するスクリプトを作成し、スクリプトで git difftool -t mytool のように呼び出します。difftool はすべての引数を新しい呼び出しにリダイレクトします。これは良いことです。ただし、何らかの方法ですべてのファイル名もリダイレクトします。基本的に、変更されたすべてのファイルでカスタム 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
4

1 に答える 1

2

どうやら、git は本質的にすべてのファイル情報をパイプし、スクリプトへの引数には表示されません。他の diff ツールを .gitconfig で「difftool」として定義する代わりに、適切な引数を使用して実行可能ファイルを呼び出しました。完全な解決策は次のとおりです。

.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

スクリプトは PATH にある必要があることに注意してください。ディレクトリを作成して PATH に追加するか、既に PATH にあるディレクトリを使用します。

どこかに変数を定義する

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

マージツール.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

呼び出し時に適切な差分およびマージ ツールが選択されます。

于 2014-08-01T15:13:46.103 に答える