解释“svn diff”输出

时间:2012-09-06 01:59:45

标签: svn diff

假设a.c文件中没有内容,然后按如下方式修改文件:

#include <stdio.h>

int main()
{
    printf("Hello, world\n");
}

执行svn diff,我收到了此消息。

--- b.c (revision 1)
+++ b.c (working copy)
@@ -0,0 +1,6 @@
+#include <stdio.h>
+
+int main()
+{
+    printf("Hello, world\n");
+}

在代码中再添加一行:

#include <stdio.h>

int main()
{
    printf("Hello, world\n");
    printf("Goodbye, world\n");
}

这是svn diff结果:

--- b.c (revision 2)
+++ b.c (working copy)
@@ -3,4 +3,5 @@
 int main()
 {
     printf("Hello, world\n");
+    printf("Goodbye, world\n");
 }

我想对于旧的( - )和新的(+)版本,逗号后的数字是显示的总数的行。但是,我不确定逗号之前的数字。我认为这是改变开始的地方,但对于第一种情况,新的(+)版本的数字1不是0。

如何解释svn diff输出?

3 个答案:

答案 0 :(得分:6)

来自维基百科上的Unified diff format

@@ -l,s +l,s @@ optional section heading
     

hunk范围信息包含两个hunk范围。的范围   原始文件的hunk前面有一个减号和范围   对于新文件,前面加上一个加号。每个大块范围都是   格式l,s其中l是起始行号,s是数字   更改块应用于每个相应文件的行数。在很多   GNU diff的版本,每个范围都可以省略逗号和尾随值   s,在这种情况下,s默认为1.注意,唯一的确实   有趣的值是第一个范围的l行号;一切   其他值可以从差异计算。

答案 1 :(得分:3)

  

我认为这是改变开始的地方,但对于第一种情况,新的(+)版本的数字1不是0。

行号从1开始,因此新(+)文件的1,6可以按您所写的方式解释:1是起始行号,6是行数所示。

行号的0必须是表示文件不存在的特殊情况。这样,您就可以区分不存在的旧( - )文件 - 0,0 - 和空文件 - 1,0

答案 2 :(得分:1)

diff使用可以输入'patch'命令的格式。

以下是一些可以帮助您入门的信息:http://www.linuxtutorialblog.com/post/introduction-using-diff-and-patch-tutorial