补丁文件的格式是什么?

时间:2009-06-12 15:40:15

标签: patch file-format

以下是什么意思?

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 @@
     "\"\\\"\"",
     "\":\"",
     "\"/\"",
+    "\"(\"",
+    "\")\"",
     "\".\"",
     "\"@\"",
     "\"\\\'\"",

4 个答案:

答案 0 :(得分:87)

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

@@阻止标头

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

这两个范围,-的范围是原始文件中的块的范围,以及新文件中范围+的范围。 R指定diff操作开始的行号。

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

  • 每次删除一行时,+r号码小于,而不是-r
  • 每次添加一行时,+r号码大于 <{1}}
  • 更改行会将-r添加到0号码。 (相同范围的行)

代码行的块

在这些块中,行被标识为添加或删除+r表示删除,-表示添加。在该块中没有变化的行将不会有++前面。

在您的示例中,这意味着有两个块或部分在两个文件之间发生了变化,其中包含-的行是添加的新行,没有删除任何内容。

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

答案 1 :(得分:13)

旧文件名

--- 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:chunk从旧文件的第4行开始(包括上下文行);
  • 9:旧文件中块中的行数,包括上下文行(所以前面有-或没有任何内容的行总数);
  • +4:chunk从新文件的第4行开始;
  • 12:新文件中块中的行数,包括上下文行(所以前面有+或者前面没有任何内容的行总数。)

注意:我更改了差异以包含修改的行,因此删除的行后跟添加的行。

@@ -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 @@
     "\"\\\"\"",
     "\":\"",
     "\"/\"",
+    "\"(\"",
+    "\")\"",
     "\".\"",
     "\"@\"",
     "\"\\\'\"",

答案 2 :(得分:1)

+字符表示自上一版NutchAnalysisConstants.java以来添加了这些行。 @@行告诉您差异已跳转到文件的另一部分,在本例中为原始行39或新行中的第43行。

答案 3 :(得分:0)

这取决于你的要求。 Diff显示两个文件之间的差异。在您的情况下,您正在从两个不同的地方区分NutchAnalysisConstants.java并生成有关这些差异的信息。

diff的{p> -r意味着“递归差异”,尽管在这种情况下它没有做任何事情,因为你是在分析文件,而不是目录。

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

-N意味着如果在directory1中我有一个文件,但它在directory2中不存在,那么diff应该将其视为文件存在但在目录2中为空(从而有效地为您提供directory1中的文件。

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

至于输出的含义,这个link可能对你有用。