【问题标题】:Unable to svn diff using meld无法使用 meld 进行 svn diff
【发布时间】:2012-06-22 07:06:36
【问题描述】:

我想使用 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 工具传递的不仅是 2 个要比较的路径,还有标签等其他选项(您可以通过传递给 --cmd 一个打印其命令行的脚本来查看所有选项)。也许融合不接受那些额外的选项。我对融合知之甚少,只是一个想法。
  • 问题。我应该如何打印命令行参数?..在这里的链接中,yolinux.com/TUTORIALS/Subversion.html 写着如果我在 subversion/config 中写 'diff-cmd = echo',它将打印命令行参数。但是在这种情况下我得到的错误是'svn: E200012: Process 'echo' failed (exitwhy 2)'..我应该怎么做才能打印命令行参数?

标签: linux svn meld


【解决方案1】:

我相信 E200012 意味着底层进程(融合)以非零退出代码退出。许多 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 确实以非零退出代码退出,应该可以解决你的问题。

希望对你有帮助。

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 查看this answer 了解另一种允许 meld 进行合并的方法。
    猜你喜欢
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 2011-01-26
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2011-11-07
    相关资源
    最近更新 更多