2012-06-20 37 views
5

我想使用meld来查看修订之间的差异。我安装MELD然后在项目目录执行:无法使用meld来比较差异

svn diff -r 2165:2182 --diff-cmd meld 

但thows了以下错误:

Index: app/models/college_friends_count.rb 
=================================================================== 
svn: E200012: Process 'meld' failed (exitwhy 2) 

谁能告诉我是怎么回事错在这里?

+0

尝试在两个任意文件运行MELD。它工作吗? –

+1

是啊......它正在工作......如果我在没有提交的情况下更改某些文件中的内容,则meld会通过执行“合并”来显示差异。但比较不同的修订版本不起作用 –

+0

SVN传递到diff工具不仅有2个路径可以进行比较,而且还有其他选项(如标签)(您可以通过传递给--cmd脚本来显示其命令行来查看所有选项)。也许融合不接受那些额外的选择。我对融合知之甚少,只是一个想法。 –

回答

5

我相信E200012意味着用非零退出代码退出的底层进程(meld)。很多差异工具都是用来表示差异操作的结果(0 =没有差异1 =差异等)。

虽然我的meld版本似乎不使用非零退出代码,但我知道colordiff会在目录爬行“svn diff”期间暂停SVN,就像上面的示例中那样。在没有任何测试更改的文件上试试。

一个很好的解决方法是让自己的diff命令,让我们说你怎么称呼它meld_svn:

#!/bin/bash 
meld "$6" "$7" 
exit 0 

所以我们正在做的是忽视MELD的退出代码,并与我们自己退出(其中获不停止SVN)。参数周围的引号意味着它们中包含空格的文件名不会破坏您的脚本。

使其可执行,然后编辑〜/ .subversion/config并将diff-cmd设置为“meld_svn”。这对colordiff很有用,如果融合确实以非零退出代码退出,应该用融合解决你的问题。

我希望有帮助。

4

对我来说,问题在于,默认情况下,svn将-u作为外部diff命令的选项进行传递,并且meld不指望或标记。

-x标志svn-diff允许你来覆盖默认的标志:上融合了命令行

svn diff -x \"\" --diff-cmd meld 

这将替换-u""的转义必需的,这样你的shell不解析 - 经济通标志着第一轮,并将它们传递给SVN,SVN将它传递给meld命令行。

(顺便说一句,使用echo作为DIFF-CMD可以让你轻松检查什么SVN会发送到MELD)

+0

请参阅[本答案](http:// stackoverflow。com/a/7418087/420867)为另一种方法,也允许融合进行合并。 – drevicko