【问题标题】:How to get NO context when using svn diff使用 svn diff 时如何获取无上下文
【发布时间】:2009-10-16 13:01:11
【问题描述】:

当我从命令行使用“svn diff”时,它会打印出已更改的行以及上下文前后未更改的 3 行。我更喜欢只看到没有上下文的更改行。我无法确定任何能让我让它以这种方式运行的命令行选项。标准的 'diff' 和 'cvs diff' 默认做我想要的。当然'svn diff'可以做到这一点,但我错过了一些东西。有人知道怎么做吗?

【问题讨论】:

    标签: svn command-line diff


    【解决方案1】:

    在查看了 unwind 上面给出的有用链接后,简短的回答是 svn 的内置 diff 不能做我想要的。您可以告诉它使用标准的外部差异,并将 arg 传递给它以告诉它您不需要上下文。我将以下别名放在我的 .bashrc 中,如果我改用它,现在一切正常:

    alias svndiff='svn diff --diff-cmd=diff -x -U0'
    

    【讨论】:

    • -xsvn diff 的扩展参数,它使紧随其后的令牌(此处为-U0)被传递给使用--diff-cmd(此处为diff)指定的diff 命令。
    【解决方案2】:

    上面的建议仍然产生上下文格式,但是有 0 行上下文。这仍然不是颠覆之前的传统差异输出。

    对我有用的是:svn di --diff-cmd=diff -x --normal

    --normal 选项(在 OSX 附带的差异中)提供了一些人喜欢的传统格式。

    【讨论】:

      【解决方案3】:

      您可以将 'svn diff' 的结果通过管道传输到 grep 并编写正则表达式来获得您想要的结果。例如,试试这个:

      svn diff | grep "^[+-\]"
      

      上面的命令可以得到所有以“+”或“-”或“\”开头的行。 (如果您想查看诸如“\文件末尾没有换行符”之类的差异,则需要使用“\”。)

      【讨论】:

      • 如果您只想要更改的行,这可以正常工作。但是,它无法输出有关行号的正确信息。例如。前后有 3 行上下文,“@@ -21,7 +21,7 @@”表示第 24 行已更改。如果没有上下文,您会看到“@@ -24,1 +24,1 @@”
      【解决方案4】:

      This thread 似乎得出的结论是,您应该使用外部 diff 命令来控制上下文的数量。

      我更喜欢统一差异,所以我的手指总是打字

      svn diff -x -u
      

      我认为这意味着使用了外部(GNU diff)命令。

      【讨论】:

      • 感谢您提供有用的链接。令我惊讶的是,内置的差异不能做我想做的事。在我看来,这违反了要求输出最少的 Unix 原则。使用 -x -u 命令给了我相同的结果。 'svn help diff' 告诉我这些是默认值。也许您根本不需要输入额外的字符?
      猜你喜欢
      • 1970-01-01
      • 2010-09-23
      • 2012-06-22
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      相关资源
      最近更新 更多