Git Diff与超越比较

Ava*_*nst 106 git beyondcompare

我成功地让git启动Beyond Compare 3作为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
Run Code Online (Sandbox Code Playgroud)

有没有其他人遇到过这个问题并知道解决方案?

编辑:
我已经按照VonC的建议,但我仍然遇到与以前完全相同的问题.我是Git的新手,所以也许我没有正确使用差异.

例如,我试图用这样的命令在文件上看到diff:
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
Run Code Online (Sandbox Code Playgroud)

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

[diff]  
external = c:/cygwin/bin/git-diff-wrapper.sh
Run Code Online (Sandbox Code Playgroud)

yeh*_*nan 137

我不使用额外的包装.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"
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我正在使用mingw git shell在Windows 7中运行.我不得不使用linux样式路径`/ c/program files`而不是`c:/ program files`.我还删除了`"$(cygpath -w $ LOCAL)"`并且只使用了"$ LOCAL"`.这似乎成功了. (12认同)
  • 正如@pClass在下面提到的,"bc3"现在是新版git中的内部工具.您应该使用唯一的名称,例如"beyondcompare3" (5认同)
  • GitHub Shell(在Windows 8上)告诉我`bcompare:command not found`-直到我将工具的NAME从`bc3`更改为其他东西(如`abc3`).我猜一些内部Github设置受到干扰.另外,我删除了`"$(cygpath -w $ LOCAL)"部分并将其替换为`"$ LOCAL"`.现在它工作得很好.谢谢! (4认同)
  • 我也找到了这篇文章:http://www.scootersoftware.com/support.php?zz=kb_vcs (2认同)

Nic*_*ski 27

感谢Posh-Git的作者@dahlbyk发布他的配置作为要点.它帮助我解决了配置问题.

[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
Run Code Online (Sandbox Code Playgroud)


use*_*ser 20

为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
Run Code Online (Sandbox Code Playgroud)

为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
Run Code Online (Sandbox Code Playgroud)

然后用 git difftool

  • 如果在git bash中运行这些命令,请使用\转义$ (7认同)
  • @Danijel [official doc](http://www.scootersoftware.com/support.php?zz=kb_vcs#gitlinux) 在@Daniel Magnussons 的回答中指出`注意:在命令行上使用 bc3 用于 BC 版本 3 和4` (3认同)

小智 11

使用比 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"
Run Code Online (Sandbox Code Playgroud)


Dav*_*ido 7

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

在此输入图像描述

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

git config --global diff.tool bc3

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

Run Code Online (Sandbox Code Playgroud)

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


nac*_*man 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
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 5

除了比较支持页面是有点短。

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

提炼:

$ git config --global diff.external <path_to_wrapper_script>
Run Code Online (Sandbox Code Playgroud)

在命令提示符下,替换为“ git-diff-wrapper.sh”的路径,因此您的~/.gitconfig包含

-->8-(snip)--
[diff]
    external = <path_to_wrapper_script>
--8<-(snap)--
Run Code Online (Sandbox Code Playgroud)

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

[diff]
    external = c:/Documents and Settings/sschuber/git-diff-wrapper.sh
Run Code Online (Sandbox Code Playgroud)

.gitconfig

"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat
Run Code Online (Sandbox Code Playgroud)

在包装脚本中。


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


Mar*_*way 5

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


mit*_*aka 5

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\"
Run Code Online (Sandbox Code Playgroud)


sar*_*ngh 5

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

git difftool --tool-help
Run Code Online (Sandbox Code Playgroud)

您将看到与此类似的输出

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
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令将 Beyond Compare 配置为默认 difftool

   git config --global diff.tool bc
Run Code Online (Sandbox Code Playgroud)

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