首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cygwin Git:合并工具kdiff3不可用

Cygwin Git:合并工具kdiff3不可用
EN

Stack Overflow用户
提问于 2014-01-31 23:52:25
回答 3查看 6.5K关注 0票数 5

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

我遵循了诺姆·刘易斯的指示:http://noamlewis.wordpress.com/2011/03/22/how-to-use-kdiff3-as-a-difftool-mergetool-with-cygwin-git/

但它不起作用:

正在运行

代码语言:javascript
复制
 git mergetool -t kdiff3

结果如下:

代码语言:javascript
复制
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'

但是,运行

代码语言:javascript
复制
~/kdiff3.sh

按预期打开kdiff3。

这是我的.gitconfig:

代码语言:javascript
复制
[diff]
        tool = kdiff3
[merge]
        tool = kdiff3
[mergetool "kdiff3"]
        path = ~/kdiff3.sh
        keepBackup = false
        trustExitCode = false

kdiff3.sh

代码语言:javascript
复制
#!/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
EN

回答 3

Stack Overflow用户

发布于 2014-11-14 09:22:48

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

代码语言:javascript
复制
[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
票数 6
EN

Stack Overflow用户

发布于 2014-02-01 00:01:18

简单的答案是,你不能在一个git配置文件中有一个'~‘(显然)。

因此,替换下面这一行:

代码语言:javascript
复制
[mergetool "kdiff3"]
    path = ~/kdiff3.sh

有了这个:

代码语言:javascript
复制
[mergetool "kdiff3"]
    path = /home/mike.hadlow/kdiff3.sh

让它工作得很好。

票数 3
EN

Stack Overflow用户

发布于 2015-12-31 20:25:40

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

代码语言:javascript
复制
git config --global -l 

我知道了

mergetool.kdiff3.cmd=‘C:/程序文件(x86)/KDiff3/kdiff3.exe’"$BASE“"$LOCAL”"$REMOTE“-o "$MERGED”

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

mergetool“.gitconfig”下,我的资源文件包含上面的命令

将此行更改为mergetool "kdiff3"

解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21484240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档