Git Diff与超越比较

时间:2010-01-15 04:21:31

标签: git beyondcompare

我成功地让git启动Beyond Compare 3作为差异工具,但是当我做差异时,我正在比较的文件没有被加载。只加载了最新版本的文件而没有其他内容,因此Beyond Compare右侧窗格中没有任何内容。

我正在使用带有Beyond Compare 3的Cygwin运行git 1.6.3.1。我已经建立了超越比较,因为他们在网站的支持部分建议用这样的脚本:

#!/bin/sh  
# diff is called by git with 7 parameters:  
# path old-file old-hex old-mode new-file new-hex new-mode  
"path_to_bc3_executable" "$2" "$5" | cat

有没有其他人遇到过此问题并知道解决方法?

修改
我遵循了VonC的建议,但我仍然遇到与以前完全相同的问题。我是Git的新手,所以也许我没有正确使用差异。

例如,我试图用这样的命令在文件上看到差异:
    git diff main.css

Beyond Compare将打开,只在左侧窗格中显示我当前的main.css,右侧窗格中没有任何内容。我希望在左窗格中看到我当前的main.css与HEAD相比,基本上我最后提交的内容。

我的git-diff-wrapper.sh看起来像这样:

#!/bin/sh  
# diff is called by git with 7 parameters:  
# path old-file old-hex old-mode new-file new-hex new-mode  
"c:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

我的git配置对于Diff来说是这样的:

[diff]  
external = c:/cygwin/bin/git-diff-wrapper.sh

19 个答案:

答案 0 :(得分:131)

我不使用额外的包装.sh文件。我的环境是Windows XP,cygwin上的git 1.7.1和Beyond Compare 3.以下是我的 .git / config 文件。

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    #use cygpath to transform cygwin path $LOCAL (something like /tmp/U5VvP1_abc) to windows path, because bc3 is a windows software
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$(cygpath -w $LOCAL)" "$REMOTE"
[merge]
    tool = bc3
[mergetool]
    prompt = false
[mergetool "bc3"]
    #trustExitCode = true
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"

然后,我使用 $ git difftool 进行比较,并使用 $ git mergetool 进行合并。

关于 trustExitCode : 对于自定义合并命令,请指定是否可以使用合并命令的退出代码来确定合并是否成功。如果未设置为true,则检查合并目标文件时间戳,如果文件已更新,则假定合并已成功,否则将提示用户指示合并成功。

答案 1 :(得分:27)

感谢@dahlbyk的作者Posh-Git发布了他的config as a gist。它帮助我解决了配置问题。

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc3
[mergetool]
    prompt = false
    keepBackup = false
[mergetool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
    trustExitCode = true
[alias]
    dt = difftool
    mt = mergetool

答案 2 :(得分:19)

为Beyond Compare 2运行以下命令:

git config --global diff.tool bc2
git config --global difftool.bc2.cmd "\"c:/program files (x86)/beyond compare 2/bc2.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

为Beyond Compare 3运行以下命令:

git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

然后使用git difftool

答案 3 :(得分:9)

答案 4 :(得分:6)

这是我的配置文件。这需要一些摔跤,但现在它正在发挥作用。 我正在使用Windows服务器,msysgit和超越比较3(显然是x86版本)。你会注意到我不需要指定任何参数,我使用“path”而不是“cmd”。

[user]
        name = PeteW
        email = petew@petew.com
[diff]
        tool = bc3
[difftool]
        prompt = false
[difftool "bc3"]
        path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
[merge]
        tool = bc3
[mergetool]
        prompt = false
        keepBackup = false
[mergetool "bc3"]
        path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
        trustExitCode = true
[alias]
        dt = difftool
        mt = mergetool

答案 5 :(得分:4)

Beyond Compare support page有点简短。

查看我的diff.external answer了解更多信息(关于确切的语法)

提取物:

$ git config --global diff.external <path_to_wrapper_script>
  

在命令提示符处,替换为“git-diff-wrapper.sh”的路径,以便~/.gitconfig包含

-->8-(snip)--
[diff]
    external = <path_to_wrapper_script>
--8<-(snap)--
  

确保使用正确的语法指定包装器脚本和diff工具的路径,即使用forward slashed而不是反斜杠。就我而言,我有

[diff]
    external = c:/Documents and Settings/sschuber/git-diff-wrapper.sh
  <{1>}和

中的

.gitconfig
  

在包装器脚本中。


注意:您也可以使用git difftool

答案 6 :(得分:4)

看起来BC3仅支持PRO版的3路合并。 http://www.scootersoftware.com/moreinfo.php?zz=kb_editions

答案 7 :(得分:3)

请注意你做了2美元的错误路径。 因为你不在Cygwin但BC3不在,所以你应该为它指定一个完整的路径。例如“d:/ cygwin $ 2”

请在这里参考我的git-diff-wrapper.sh:

$ cat ~/git-diff-wrapper.sh
#!/bin/sh
echo $2
echo $5
/cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "d:/programs/cygwin$2" "$5"
祝你好运。

答案 8 :(得分:2)

BC4 64bit更新: 这适用于Git for Windows v.2.16.2和Beyond Compare 4 - v.4.2.4(64位版)

我手动编辑了位于我的用户root中的.gitconfig文件&#34; C:\ Users \ MyUserName&#34; 并用

替换了diff / difftool和merge / mergetool标签
[diff]
  tool = bc
[difftool "bc"]
  path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[difftool "bc"]
  cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$LOCAL\" \"$REMOTE\"
[difftool]
  prompt = false
[merge]
  tool = bc
[mergetool "bc"]
  path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[mergetool "bc"]
  cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"

答案 9 :(得分:1)

答案 10 :(得分:1)

不同之处在于被调用的exe:将其设置为调用bcomp.exe并且它将正常工作。配置您的环境以调用bcompare.exe,最终您的修订系统的比较方面是空的。

答案 11 :(得分:1)

为Beyond Compare 3运行这些命令(如果系统中的BCompare.exe路径不同,请根据您的路径替换它):

git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files (x86)/beyond compare 3/BCompare.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

然后使用git difftool

答案 12 :(得分:1)

如果您运行的是Windows 7(专业版)和Git for Windows(版本2.15或更高版本),您只需运行以下命令即可找出Git for Windows支持的不同差异工具

git difftool --tool-help

您将看到类似于此

的输出
  

git difftool --tool =&#39;可以设置为以下之一:
                  vimdiff同时                   vimdiff2                   vimdiff3

这意味着你的git现在不支持(无法找到)作为difftool进行比较。

为了让Git能够找到超越比较的有效difftool,你应该在系统路径环境变量中有 Beyond Compare安装目录。您可以通过从shell运行bcompare来检查这一点(cmd,git bash或powershell。我正在使用Git Bash)。如果Beyond Compare未启动,请将其安装目录(在我的示例中为C:\ Program Files \ Beyond Compare 4)添加到系统路径变量中。在此之后,重新启动shell。 Git将展示Beyond Compare作为可能的difftool选项。您可以使用以下任何命令在difftool之外启动(例如,将任何本地文件与其他分支进行比较)

git difftool -t bc branchnametocomparewith -- path-to-file
or 
git difftool --tool=bc branchnametocomparewith -- path-to-file

您可以使用以下命令

配置超出比较作为默认difftool
   git config --global diff.tool bc

P.S。请记住,上面命令中的bc可以是bc3或bc,基于Git能够从路径系统变量中找到的内容。

答案 13 :(得分:1)

使用比 OP 更高版本的 Git 和 Beyond Compare,以下对我有用:

  • Windows 版 Git - v.2.22.0
  • Beyond Compare 4 - v.4.2.10(64 位版)

要编辑的配置文件:%USERPROFILE%\.gitconfig

替换diff/difftool和merge/mergetool标签
[diff]
    tool = bc4
[difftool]
    prompt = false
[difftool "bc4"]
    cmd = \"c:/program files/beyond compare 4/bcomp.exe\" "$LOCAL" "$REMOTE"
[merge]
    tool = bc4
[mergetool]
    prompt = false
[mergetool "bc4"]
    trustExitCode = true
    cmd = \"c:/program files/beyond compare 4/bcomp.exe\" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"

答案 14 :(得分:0)

无论出于何种原因,对我来说,git diff创建的tmp文件在超越比较之前被删除了。我不得不先把它复制到另一个地方。

cp -r $2 "/cygdrive/c/temp$2"
cygstart /cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "C:/temp$2" "$5"

答案 15 :(得分:0)

对于MAC经过大量的研究后,它对我有用..! 1.安装超越比较,这将安装在以下位置

  

/ Applications / Beyond \ Compare.app/Contents/MacOS/bcomp

请按照以下步骤在git http://www.scootersoftware.com/support.php?zz=kb_mac

中将bc作为差异/合并工具

答案 16 :(得分:0)

对于带有BC2.exe的git版本2.15.1.windows.2。

下面的配置最终适用于我的机器。

[difftool "bc2"] cmd = \"c:/program files/beyond compare 2/bc2.exe\" ${LOCAL} ${REMOTE}

答案 17 :(得分:0)

Windows 10,Git v2.13.2

我的.gitconfig。记住为'\'和'“'添加转义字符。

[diff]
    tool = bc4
[difftool]
    prompt = false
[difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\BCompare.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc4
[mergetool "bc4"]
    path = C:\\Program Files\\Beyond Compare 4\\BCompare.exe

您可以参考setting up beyond compare as difftool来使用git命令对其进行配置。

答案 18 :(得分:0)

为我工作过 Windows 10

在git终端中运行,

git config --global diff.tool bc3
git config --global difftool.bc3.path "c:/program files/beyond compare 4/bcomp.exe"
git config --global merge.tool bc3
git config --global mergetool.bc3.path "c:/program files/beyond compare 4/bcomp.exe"