2009-10-16 90 views
13

当我使用命令行中的'svn diff'时,它会打印出已更改的行,但也会打印出上下文之前和之后未更改的三行。我更喜欢只看到没有上下文的变化线条。我一直无法确定任何命令行选项,这些选项可以让我按照这种方式进行操作。标准的“差异”和“CVS差异”做默认情况下我想要的。当然'svn diff'可以做到这一点,但我错过了一些东西。任何人都知道吗?如何在使用svn时获取NO上下文比较

回答

17

通过放松观察上面给出的有用链接之后,简短答案是svn's built -in diff不能做我想要的。你可以告诉它使用标准的外部差异,并通过arg来告诉它你不需要上下文。我把下面的别名在我的.bashrc和现在都工作得很好,如果我使用来代替:

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

'-x'是'svn diff'的扩展参数,它会使紧跟着的标记(这里是'-U0')传递给用'--diff-cmd'指定的diff命令,这里是'diff'。 – valid 2015-04-21 11:42:06

2

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

我更喜欢统一比较,所以我的手指总是键入

svn diff -x -u 

这意味着使用外部(GNU的diff)命令,我想。

+0

感谢您的有用链接。让我感到惊讶的是,内置的差异不能做我想要的。对我来说,违反了输出最少的Unix原则。 使用-x -u命令给我的结果与不同。 'svn help diff'告诉我那些是默认值。也许你不需要输入额外的字符? – DaveBurns 2009-10-16 13:35:24

3

您可以将'svn diff'的结果传递给grep并编写正则表达式来获取所需内容。例如,试试这个:

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

上面的命令会让你以'+'或' - '或'\'开头的所有行。 (如果你想看到差异,例如“\在文件末尾没有换行符”,那么你需要'\')。

+0

如果你只想改变线条,这工作正常。但是,它无法输出有关行号的正确信息。例如。在之前/之后有3行上下文,“@@ -21,7 +21,7 @@”表示第24行改变了。在没有上下文的情况下,你会看到“@@ -24,1 +24,1 @@” – kamczak 2015-11-30 17:55:58

4

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

我什么工作原理是:svn di --diff-cmd=diff -x --normal

--normal选项(在DIFF与OSX的船舶)给出了一些人喜欢传统的格式。