2011-06-02 92 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