5

我正在尝试让我的 cygwin git 安装与 kdiff3 一起使用。

我在这里遵循了 Noam Lewis 的说明:http: //noamlewis.wordpress.com/2011/03/22/how-to-use-kdiff3-as-a-difftool-mergetool-with-cygwin-git/

但它不起作用:(

跑步

 git mergetool -t kdiff3

给出这个结果:

Normal merge conflict for ...
  {local}: modified file
  {remote}: modified file
Hit return to start merge resolution tool (kdiff3):
The merge tool kdiff3 is not available as '~/kdiff3.sh'

然而,运行

~/kdiff3.sh

按预期打开 kdiff3。

这是我的 .gitconfig:

[diff]
        tool = kdiff3
[merge]
        tool = kdiff3
[mergetool "kdiff3"]
        path = ~/kdiff3.sh
        keepBackup = false
        trustExitCode = false

kdiff3.sh

#!/bin/sh
RESULT=""
for arg
  do
    if [[ "" != "$arg" ]] && [[ -e $arg ]];
      then
        OUT=`cygpath -wa $arg`
      else
        OUT=$arg
      if [[ $arg == -* ]];
        then
          OUT=$arg
        else
          OUT="'$arg'"
      fi
    fi
    RESULT=$RESULT" "$OUT
  done
/cygdrive/c/Program\ Files\ \(x86\)/KDiff3/kdiff3.exe $RESULT
4

3 回答 3

6

不需要 wrap shell 脚本。我正在使用安装在 Windows 中的 kdiff3,并将其文件夹设置在路径中,并在 cygwin 中设置 git。如果您没有为 kdiff3 设置路径,则需要在 cmd 中提供完整路径为cmd = /cygdrive/c/apps/KDiff3/kdiff3 ...

[diff]
    tool = kdiff3
[merge]
    tool = kdiff3
[difftool "kdiff3"]
    cmd = kdiff3 \"$(cygpath -wla $LOCAL)\" \"$(cygpath -wla $REMOTE)\"
    trustExitCode = false
[mergetool "kdiff3"]
    cmd = kdiff3 \"$(cygpath -wla $BASE)\" \"$(cygpath -wla $LOCAL)\" \"$(cygpath -wla $REMOTE)\" -o \"$(cygpath -wla $MERGED)\"
    keepBackup = false
    trustExitCode = false
[mergetool]
    prompt = false
[difftool]
    prompt = false
于 2014-11-14T01:22:48.087 回答
3

简单的答案是您不能在 git 配置文件中包含“~”(显然)。

所以替换这一行:

[mergetool "kdiff3"]
    path = ~/kdiff3.sh

有了这个:

[mergetool "kdiff3"]
    path = /home/mike.hadlow/kdiff3.sh

让它工作正常。

于 2014-01-31T16:01:17.627 回答
0

对我来说,解决方案是更改全局 .gitconfig 文件。跑步时

git config --global -l 

我懂了

mergetool.kdiff3.cmd='C:/Program Files (x86)/KDiff3/kdiff3.exe' "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"

这正是它应该是的。我的问题是我安装了 sourcetree 并且它“劫持”了工具设置。

我的 .gitconfig 文件在 [mergetool "sourcetree"]下有上面的命令

将此行更改为 [mergetool "kdiff3"]

解决了这个问题。

于 2015-12-31T12:25:39.563 回答