2011-06-02 88 views
3
$ vim patch 
Index: toPatch 
=================================================================== 
--- toPatch 
+++ toPatch 
@@ -2,4 +2,4 @@ 
    */ 
-final public class XMLWriter { 
+public class XMLWriter { 

$ vim toPatch 
*/ 
final public class XMLWriter { 

    public static float CURRENT_VERSION=2.2f; 
    $ patch -p0 -ui patch 
patching file toPatch 
Hunk #1 succeeded at 1 with fuzz 2 (offset -1 lines). 

为什么绒毛和线偏移?这是一个试图理解差异和补丁的演示案例,因为工具有时/通常不像预期的那样工作。为什么此修补程序应用了1的模糊,并且失败且模糊为0?

回答

14

补丁会对diff和您的文件的一致性进行一些基本检查,如果这些检查失败,则会得到偏移或模糊。

由于修补程序需要文件的差异匹配行2--4的内容,因此您的偏移量为-1。然而,在你的文件中,它们是第1--3行。

由于上下文的第一行(两个空格和一个*/)与实际文件中的行(一个空格和一个*/)不匹配,因此您的模糊> 0。因此,补丁在第二次传递时忽略了上下文的第一行和最后一行。

这并不能解释为什么你看到fuzz = 2而不是1.也许错误复制粘贴文件?任何其他想法,任何人?

+0

当时仍然不确定实际的问题..我刚刚搬到 – simpatico 2011-11-11 19:00:59

+0

这发生在我身上时,将补丁文件内容复制/粘贴到我的编辑器中。一些行只有空格,但它们被修剪为空行,所以补丁文件应用正确,但有模糊因素警告...... – Julien 2016-01-27 15:33:13

2

patch文件中的索引(@@之间的数字)是错误的。

  • 正如@xofon说,必须与起始线上的问题,必须,但应该是
  • 而且第二数目应不,因为在应用修补程序之前您的patch文件中有3行代码,并且在应用修补程序之后patch文件中有3行代码。
  • 但第一行*/没有问题。 patch文件中有2个空格,但这是预期的,因为第一列用于具有-+字符。 您收到的绒毛是关于偏移使用(将所有排队1)

所以你patch文件应该是

$ cat patch 
--- toPatch 
+++ toPatch 
@@ -1,3 +1,3 @@ 
    */ 
-final public class XMLWriter { 
+public class XMLWriter { 
    public static float CURRENT_VERSION=2.2f; 

,并与给定toPatch文件

$ cat toPatch 
*/ 
final public class XMLWriter { 
    public static float CURRENT_VERSION=2.2f; 

然后该补丁将应用,而无需模糊警告...

$ patch -p0 -ui patch 
patching file toPatch