【问题标题】:Configuring multiple git mergetool and difftool so that appropriate tool will be chosen based on extension配置多个 git mergetool 和 difftool 以便根据扩展选择合适的工具
【发布时间】:2014-09-24 00:30:28
【问题描述】:

当我执行 git difftool 时,它会递归地为所有文件运行默认的 difftool。我编写了一个脚本来根据扩展名选择合适的 difftool,我在脚本中调用 git difftool -t mytool 。 difftool 将所有参数重定向到新调用,这很好。但是,它也会以某种方式重定向所有文件名。所以基本上,我的脚本变得无用,因为自定义 difftool 与所有更改的文件一起传递。

我想要做的是,将 difftool 限制为一个文件,或者至少用一个文件调用我的 difftool,而不是其余文件。基本上,这是我的脚本,我将它作为 .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 git-diff rhapsody git-difftool


    【解决方案1】:

    显然,git 天生管道所有文件信息,它没有显示在脚本的参数中。我没有在 .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
    

    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
    

    它会在调用时选择正确的差异和合并工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 2017-07-06
      • 2017-09-05
      • 2012-08-01
      • 2020-12-27
      • 2014-07-20
      • 2022-11-12
      相关资源
      最近更新 更多