补丁文件的格式是啥?

Posted

技术标签:

【中文标题】补丁文件的格式是啥?【英文标题】:What is the format of a patch file?补丁文件的格式是什么? 【发布时间】:2010-11-02 12:13:25 【问题描述】:

以下是什么意思?

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

【问题讨论】:

对于 git:***.com/questions/2529441/… 查看 GNU docs...和 ​​full thing 【参考方案1】:

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

@@ 区块头

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

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

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

删除一行,+r 的数字就会小于-r。 每添加一行,+r 的数字就会大于-r 更改一行会将0 添加到+r 号码。 (行范围相同)

代码行块

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

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

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

【讨论】:

你提到了“@@ -R +R @@”的语法,其实是“@@ -R,r +R,r @@”,另外一个数字是什么意思?跨度> 逗号后面的数字是每个文件中受影响的行数。每次删除一行时,+r 数字将小于 -r。每增加一行,+r 的数字就会大于-r @NewAlexandria 我会重新格式化它,以便在列出项目时,每个项目都在单独的行上,缩进。 Lines that did not change in that chunk will have neither + or - front of it. 我认为说它前面有一个空格会更准确/具体。这很重要,因为如果更改文件中的一行以 @@ 开头,则不能与 diff 语法混淆。 r的另一种解释:-r是原文件chunk中的行数; +r 是新文件中块中的行数。基本上,计算更改前后块中的行数。【参考方案2】:

旧文件名

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

【讨论】:

感谢您解释本例中的 9 和 12【参考方案3】:

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

【讨论】:

@@ -39,6 +43,8 @@ 6 和 8 具体是什么意思? 这是更改块应用于相应文件的行数。因此,对于旧文件,它适用于 6 行,而新文件适用于 8 行。 但原来新文件并没有改变,这是设计使然吗?【参考方案4】:

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

-r 到 diff 的意思是“递归 diff”,尽管在这种情况下它什么也不做,因为你是在区分文件,而不是目录。

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

-N 表示如果在 directory1 中有一个文件,但它不在 directory2 中,diff 应该将其视为文件存在但在 directory2 中为空(从而有效地为您提供文件的全部内容在目录 1) 中。

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

至于输出是什么意思,这个link可能对你有用。

【讨论】:

链接未找到。请修正您的评论

以上是关于补丁文件的格式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

从数组中删除元素的 JSON 补丁格式是啥?

patch是啥文件

本地patch是啥意思

如何可视化或格式化差异/补丁文件? [关闭]

Ruby 中的“猴子补丁”到底是啥意思?

pcapatchdbtask是啥