119

我已经成功让 git 启动 Beyond Compare 3 作为 diff 工具,但是,当我进行 diff 时,我正在比较的文件没有被加载。仅加载文件的最新版本,没有其他内容,因此 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,右窗格中没有任何内容。与 HEAD 相比,我希望在左窗格中查看我当前的 main.css,基本上是我上次提交的内容。

我的 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

对于 Diff,我的 git 配置看起来像这样:

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

20 回答 20

149

我不使用额外的包装器 .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,则检查合并目标文件时间戳,如果文件已更新,则假定合并成功,否则提示用户指示合并成功。

于 2010-08-03T10:10:23.130 回答
28

感谢Posh-Git的作者@dahlbyk将他的配置发布为 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
于 2012-03-01T22:52:13.873 回答
21

为 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

于 2011-06-07T13:56:21.080 回答
12

官方文档对我有用

于 2012-05-16T09:45:07.710 回答
6

这是我的配置文件。它需要一些摔跤,但现在它正在工作。我正在使用 windows server、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
于 2012-10-10T13:39:59.143 回答
5

Beyond Compare 支持页面有点简短。

检查我的diff.external 答案以获取更多信息(关于确切的语法)

提炼:

$ 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]
    external = c:/Documents and Settings/sschuber/git-diff-wrapper.sh

.gitconfig

"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

在包装脚本中。


注意:您也可以使用git difftool.

于 2010-01-15T06:51:59.393 回答
4

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

于 2013-11-19T01:39:33.877 回答
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"

祝你好运。

于 2010-04-06T04:49:03.603 回答
3

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

我手动编辑了位于我的用户根目录“C:\Users\MyUserName”中的 .gitconfig 文件,并将 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\"
于 2018-03-26T16:45:47.547 回答
3

如果您正在运行 Windows 7(专业版)和 Git for Windows(v 2.15 或更高版本),您可以简单地运行以下命令来找出您的 Git for Windows 支持的不同差异工具

git difftool --tool-help

您将看到与此类似的输出

git difftool --tool=' 可以设置为以下之一:
vimdiff vimdiff2 vimdiff3

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

为了让 Git 找到 Beyond Compare 作为有效的 difftool,您的系统路径环境变量中应该有Beyond Compare 安装目录。您可以通过从 shell(cmd、git bash 或 powershell。我正在使用 Git Bash)运行 bcompare 来检查这一点。如果 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

ps 请记住,上述命令中的 bc 可以是 bc3 或 bc,具体取决于 Git 能够从您的路径系统变量中找到的内容。

于 2018-05-03T17:20:29.223 回答
2

使用比 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"
于 2021-04-09T19:28:56.197 回答
2

在 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"
于 2021-05-05T06:44:55.793 回答
1

http://rubenlaguna.com/wp/2010/08/05/visual-difftool-cygwin-git/有一个我为 BeyondCompare 工作所采用的解决方案:http: //gist.github.com/564573

于 2010-09-03T21:45:24.427 回答
1

不同之处在于调用的 exe:将其设置为调用 bcomp.exe,它会正常工作。将您的环境配置为调用 bcompare.exe,您最终会发现从您的修订系统获取的比较部分为空。

于 2014-11-03T11:23:05.983 回答
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

于 2015-04-07T13:15:40.130 回答
1

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

您可以参考设置超越比较作为 difftool使用 git 命令来配置它。

于 2018-12-20T06:54:56.563 回答
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"
于 2010-05-28T12:15:35.623 回答
0

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

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

请按照以下步骤在 git http://www.scootersoftware.com/support.php?zz=kb_mac中将 bc 作为 diff/merge 工具

于 2015-11-28T03:56:49.117 回答
0

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

下面的配置终于可以在我的机器上运行了。

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

于 2017-12-06T18:18:44.977 回答
0

要在MAC OSX中使用超越比较,您需要执行以下操作: 从菜单安装超越比较命令行工具:

在此处输入图像描述

然后你需要运行这些命令:

git config --global diff.tool bc3

git config --global merge.tool bc3
git config --global mergetool.bc3.trustExitCode true

之后,您可以git mergetool在 git 冲突的文件夹中运行,BC 将按预期工作

于 2021-10-21T09:09:18.017 回答