无法使用meld进行svn diff

8
我希望使用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。它能正常工作吗? - Ivaylo Strandjev
1
是的...它正在工作...并且如果我在没有提交的情况下更改某些文件中的内容,meld会通过执行“meld。”来显示差异。但是比较不同版本并不能正常工作。 - aash
SVN不仅将两个路径传递给diff工具进行比较,还会传递其他选项,如标签(您可以通过传递一个打印其命令行的脚本来查看所有选项)。也许meld不接受这些额外选项。我对meld了解很少,这只是一个想法。 - Dmitry Pavlenko
问题。我应该如何打印命令行参数?在这个链接中,http://www.yolinux.com/TUTORIALS/Subversion.html上写道,如果我在subversion/config中写入“diff-cmd = echo”,它将打印命令行参数。但是在这种情况下,我得到的错误是“svn:E200012:进程'echo'失败(exitwhy 2)”。我应该怎么做才能打印命令行参数? - aash
2个回答

7

我认为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”。 如果meld确实以非零退出代码退出,这对colordiff非常有效,应该解决您的meld问题。

希望这可以帮到你。


4
对于我来说,问题在于svn默认将 -u 作为选项传递给外部的diff命令,而meld并不期望或者需要这个标志。
使用 svn-diff 的 -x 标志可以让你重写这个默认标志:
 svn diff -x \"\" --diff-cmd meld

这将在meld命令行上用""替换-u,需要转义引号以防止您的Shell第一次解析引号并将其传递给SVN,SVN再将其传递给meld命令行。

(顺便说一句,使用echo作为差异命令可以轻松检查SVN将要发送到meld的内容)


参见此答案以获取另一种方法,该方法还允许meld执行合并。 - drevicko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接