补丁文件的格式是什么?


77

以下是什么意思?

diff -rBNu src.orig/java/org/apache/nutch/analysis/NutchAnalysisConstants.java src/java/org/apache/nutch/analysis/NutchAnalysisConstants.java
--- src.orig/java/org/apache/nutch/analysis/NutchAnalysisConstants.java 2009-03-10 11:34:01.000000000 -0700
+++ src/java/org/apache/nutch/analysis/NutchAnalysisConstants.java  2009-03-10 14:11:55.000000000 -0700
@@ -4,9 +4,12 @@

+  int CJK = 21;
+  int DIGIT = 22;

   int DEFAULT = 0;

   String[] tokenImage = {
     "<EOF>",
+    "\"OR\"",
     "<WORD>",
     "<ACRONYM>",
     "<SIGRAM>",
@@ -39,6 +42,8 @@
     "\"\\\"\"",
     "\":\"",
     "\"/\"",
+    "\"(\"",
+    "\")\"",
     "\".\"",
     "\"@\"",
     "\"\\\'\"",

Answers:


109

-u您使用的选项指定统一格式。在这种格式中,前两行是标头:---是原始文件,+++是新文件和时间戳。

@@ 块头

然后是以@@ -R,r +R,r @@语法开头的块(更改块)。

这是两个范围,带有的一个-是原始文件中块的范围,而带有一个+的是新文件中的范围。该R指定其中DIFF操作开始的行号。

逗号后的数字是每个文件中受影响的行数

  • 你每次删除一条线,该+r数量将-r
  • 你每次添加一条线,+r数量将是更大的-r
  • 更改线将添加0到该+r号码。(行范围相同)

代码行块

在这些块中,将行标识为添加或删除-表示删除,+表示添加。在那个块中没有改变的行将没有+或没有-它的前面。

在您的示例中,这意味着在两个文件之间更改了两个块或节,并且其中的行+是添加的新行,未删除任何内容。

您可以通过Google搜索统一差异来找到有关语法的更多信息。


3
您提到了“ @@ -R + R @@”语法,但实际上是“ @@ -R,r + R,r @@”,其他数字是什么意思?
omg

4
逗号后的数字是每个文件中受影响的行数。每次删除一行时,该+r数字都会小于-r。每次添加一条线,该+r数字将大于-r
New Alexandria

@NewAlexandria我将对其进行重新格式化,以便在列出项目时,每个项目都在单独的行上缩进。
鲍勃

3
Lines that did not change in that chunk will have neither + or - front of it.我认为将在其前面留一个空间会更准确/更具体。这很重要,因为如果已更改文件中的行以开头@@,则请勿将其与diff语法混淆。
Nateowami

1
的另一种解释r-r是在原文件的块的行数; +r是新文件中块中的行数。基本上,计算更改前后块中的行数。

20

旧文件名

--- src.orig/java/org/apache/nutch/analysis/NutchAnalysisConstants.java 2009-03-10 11:34:01.000000000 -0700

新文件名

+++ src/java/org/apache/nutch/analysis/NutchAnalysisConstants.java  2009-03-10 14:11:55.000000000 -0700
  • -4:块从旧文件的第4行开始(包括上下文行);
  • 9:旧文件中的块中的行数,包括上下文行(因此,-在它们前面有或没有的行的总数);
  • +4:块从新文件的第4行开始;
  • 12:新文件中的块中的行数,包括上下文行(因此,+在它们前面加或不加的行总数)。

注意:我将diff更改为包括修改后的行,因此先删除行,再添加行。

@@ -4,9 +4,12 @@

+  int CJK = 21;
+  int DIGIT = 22;

-  int DEFAULT = 0;
+  int DEFAULT = 42;

   String[] tokenImage = {
     "<EOF>",
+    "\"OR\"",
     "<WORD>",
     "<ACRONYM>",
     "<SIGRAM>",

与上述相同,但请注意,新文件中的块会再开始3行,因为前一个块添加了3行的净值。

@@ -39,6 +42,8 @@
     "\"\\\"\"",
     "\":\"",
     "\"/\"",
+    "\"(\"",
+    "\")\"",
     "\".\"",
     "\"@\"",
     "\"\\\'\"",

1
感谢您在此示例中解释9和12
Ask and

1

这些+字符表示这些行是从的上一版本开始添加的NutchAnalysisConstants.java。该@@行告诉您diff已跳转到文件的另一部分,在这种情况下,原始文件的第39行或新文件的第43行。


2
@@ -39,6 +43,8 @@ 6和8分别是什么意思?
omg

1
这是更改块应用于相应文件的行数。因此,对于旧文件,它适用于6行,而新文件适用于8行。
约翰G

但是事实证明,新文件没有更改,这是设计使然吗?
omg,2009年

0

这取决于您的要求。差异显示两个文件之间的差异。就您而言,您是NutchAnalysisConstants.java从两个不同的地方进行区分,并生成有关这些差异的信息。

-r diff的意思是“递归diff”,尽管在这种情况下它不执行任何操作,因为您是在比较文件而不是目录。

-B 表示忽略仅涉及空白行的更改。

-N 意味着如果在directory1中我有一个文件,但是在directory2中不存在,则diff应该将其视为文件存在但在directory2中为空(这样才能有效地为您提供directory1中文件的全部内容)。

-u 表示使用统一的输出格式,仅GNU diff和GNU补丁支持。

至于输出的含义,此链接可能对您有用。


2
找不到链接。请修正您的评论
Quamis '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.