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)

谁能告诉我这里出了什么问题?

4

2 回答 2

7

我相信 E200012 意味着底层进程(融合)以非零退出代码退出。许多差异工具这样做是为了指示差异操作的结果(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 的问题。

我希望这会有所帮助。

于 2012-12-26T07:57:03.883 回答
4

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

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

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

这替换-u""在 melds 命令行上,转义是必需的,这样您的外壳就不会在第一轮解析引号,而是将它们传递给 SVN,后者将其传递到 meld 命令行。

(顺便说一句,使用echodiff-cmd 可以让您轻松检查 SVN 将发送给 meld 的内容)

于 2013-12-03T15:38:10.343 回答