Linux 无法使用meld进行svn差异

Linux 无法使用meld进行svn差异,linux,svn,meld,Linux,Svn,Meld,我想使用meld查看修订之间的差异。我安装了meld,然后在项目目录中执行: svn diff -r 2165:2182 --diff-cmd meld 但它指出了以下错误: Index: app/models/college_friends_count.rb =================================================================== svn: E200012: Process 'meld' failed (exitwhy 2) 有

我想使用meld查看修订之间的差异。我安装了meld,然后在项目目录中执行:

svn diff -r 2165:2182 --diff-cmd meld
但它指出了以下错误:

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

有人能告诉我这里出了什么问题吗?

我相信E200012意味着基础进程(meld)以非零退出代码退出。很多diff工具都这样做是为了指示diff操作的结果(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非常有效,如果meld确实以非零退出代码退出,应该可以解决meld的问题


我希望这会有所帮助。

对我来说,问题是默认情况下,svn将-u作为选项传递给外部diff命令,而meld不期望或使用该标志

svn diff
-x
标志允许您覆盖此默认标志:

 svn diff -x \"\" --diff-cmd meld
这将在melds命令行中将
-u
替换为
,需要转义,以便shell在第一轮时不会解析引号,而是将其传递给SVN,SVN将其传递到meld命令行


(顺便说一句,使用
echo
作为diff cmd可以轻松检查SVN将发送给meld的内容)

尝试在两个任意文件上运行meld。它工作吗?是的…它工作了…而且如果我在没有提交的情况下更改某些文件中的内容,meld通过执行“meld”来显示差异。但是比较不同的版本是不起作用的SVN传递给diff工具的不仅仅是两个要比较的路径,还有其他选项,比如标签(通过传递给--cmd一个打印其命令行的脚本,您可以看到所有选项)。也许meld不接受这些额外的选项。我对梅尔德知之甚少,只是一个想法。一个问题。我应该如何打印命令行参数?。在这里的链接中,写着如果我在subversion/config中写入'diff cmd=echo',它将打印命令行参数。但在这种情况下,我得到的错误是“svn:E200012:进程“echo”失败(exitwhy 2)”。