Git比较与超越

我已经成功地让git启动Beyond Compare 3作为diff工具,但是当我做一个diff时,我正在比较的文件没有被加载。 只有最新版本的文件被加载,没有别的,所以在Beyond Compare的右窗格中没有任何东西。

我正在用Cygwin和Beyond Compare 3运行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 

有没有其他人遇到这个问题,并知道这个解决scheme?

编辑:
我遵循了VonC的build议,但是我仍然遇到和以前完全相同的问题。 我有点新Git所以也许我没有正确使用diff。

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

超越比较然后打开,只显示我的当前main.css在左窗格中,右窗格中没有任何东西。 我希望看到我的当前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 

我的gitconfiguration看起来像这样:

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

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

感谢Posh-Git的作者@dahlbyk发布他的configuration作为主旨 。 它帮助我解决了我的configuration问题。

 [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 

运行这些命令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比较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

官方文件为我工作

这是我的configuration文件。 它采取了一些摔跤,但现在它正在工作。 我正在使用的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 

超越比较支持页面有点简单。

检查我的diff.external答案更多(关于确切的语法)

提取:

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

在命令提示符处,replace为“ git-diff-wrapper.sh ”的path,这样~/.gitconfig包含

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

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

 [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

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

请注意你做错了2美元的path。 因为你在Cygwin下但BC3不在,所以你应该为它指定一个完整的path。 如“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" 

祝你好运。

为Beyond Compare 3运行这些命令(如果系统中的BCompare.exepath不同,请根据您的系统进行更换):

 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

不pipe什么原因,对我来说,由git diff创build的tmp文件在被打开之前被删除。 我必须先把它复制到另一个位置。

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

所不同的是在exe被称为:设置它来调用bcomp.exe,它会正常工作。 configuration你的环境来调用bcompare.exe,你会最终从你的修订版本系统的比较一侧是空的。

对于MAC做了很多研究后,它为我工作..! 1.安装超越比较,这将安装在下面的位置

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

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