我成功地让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
答案 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)
http://rubenlaguna.com/wp/2010/08/05/visual-difftool-cygwin-git/有一个我为Beyond Compare工作的解决方案: http://gist.github.com/564573
答案 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,以下对我有用:
要编辑的配置文件:%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"