当我执行git difftool时,递归地为所有文件运行默认的difftool。我写了一个脚本来根据扩展名选择合适的difftool,我在脚本中调用git difftool -t mytool。 difftool将所有参数重定向到新调用,这很好。但是,它以某种方式重定向所有文件名。所以基本上,我的脚本变得无用,因为自定义difftool与所有已更改的文件一起传递。
我想要做的是,将difftool限制为一个文件,或至少用一个文件调用我的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
答案 0 :(得分:1)
显然,git固有地管理所有文件信息,并且它不会显示在脚本的参数中。我没有在.gitconfig中将其他diff工具定义为“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
<强> 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
它将在通话时选择正确的差异和合并工具。