【发布时间】:2009-10-16 13:01:11
【问题描述】:
当我从命令行使用“svn diff”时,它会打印出已更改的行以及上下文前后未更改的 3 行。我更喜欢只看到没有上下文的更改行。我无法确定任何能让我让它以这种方式运行的命令行选项。标准的 'diff' 和 'cvs diff' 默认做我想要的。当然'svn diff'可以做到这一点,但我错过了一些东西。有人知道怎么做吗?
【问题讨论】:
标签: svn command-line diff
当我从命令行使用“svn diff”时,它会打印出已更改的行以及上下文前后未更改的 3 行。我更喜欢只看到没有上下文的更改行。我无法确定任何能让我让它以这种方式运行的命令行选项。标准的 'diff' 和 'cvs diff' 默认做我想要的。当然'svn diff'可以做到这一点,但我错过了一些东西。有人知道怎么做吗?
【问题讨论】:
标签: svn command-line diff
在查看了 unwind 上面给出的有用链接后,简短的回答是 svn 的内置 diff 不能做我想要的。您可以告诉它使用标准的外部差异,并将 arg 传递给它以告诉它您不需要上下文。我将以下别名放在我的 .bashrc 中,如果我改用它,现在一切正常:
alias svndiff='svn diff --diff-cmd=diff -x -U0'
【讨论】:
-x 是svn diff 的扩展参数,它使紧随其后的令牌(此处为-U0)被传递给使用--diff-cmd(此处为diff)指定的diff 命令。
上面的建议仍然产生上下文格式,但是有 0 行上下文。这仍然不是颠覆之前的传统差异输出。
对我有用的是:svn di --diff-cmd=diff -x --normal
--normal 选项(在 OSX 附带的差异中)提供了一些人喜欢的传统格式。
【讨论】:
您可以将 'svn diff' 的结果通过管道传输到 grep 并编写正则表达式来获得您想要的结果。例如,试试这个:
svn diff | grep "^[+-\]"
上面的命令可以得到所有以“+”或“-”或“\”开头的行。 (如果您想查看诸如“\文件末尾没有换行符”之类的差异,则需要使用“\”。)
【讨论】:
This thread 似乎得出的结论是,您应该使用外部 diff 命令来控制上下文的数量。
我更喜欢统一差异,所以我的手指总是打字
svn diff -x -u
我认为这意味着使用了外部(GNU diff)命令。
【讨论】: