製作patch, 使用patch的方法
製作patch
diff -Naur olddir newdir > new-patch
製作patch要注意的事項
記得要讓前置的目錄階層數有相同的深度,例如:
--- old/modules/pcitable Mon Sep 27 11:03:56 1999
+++ new/modules/pcitable Tue Dec 19 20:05:41 2000
上面用diff產生的結果,可以給patch使用
--- old/try1/other/modules/pcitable Mon Sep 27 11:03:56 1999
+++ new/modules/pcitable Tue Dec 19 20:05:41 2000
但是上面產生的結果在使用上可能會發生問題,第一行目錄的深度有四層,而第二行只有兩層. 這裡建議直接修改 ---和+++後面的內容讓目錄結構有相同的深度.
使用Patch命令
patch -p0 < new-patch
patch -p1 < new-patch
這兩個命令的差異在於目前工作目錄的不同
另外一種用法是讓patch 從標準輸入讀取資料:
cat new-patch | patch -p0
還有一種用法是讓patch 讀取 "here document"的方式
( 省略此種方法之舉例 )
Patch指令的階層 ( -p0 和 -p1 的差別 )
假設patch的表頭如下
--- old/modules/pcitable Mon Sep 27 11:03:56 1999
+++ new/modules/pcitable Tue Dec 19 20:05:41 2000
使用 -p0 , patch會期待在你目前的工作目錄下有一個名為new的目錄, 接著會有modules目錄, 然後是pictable目錄
使用 -p1 , 路徑的第一層會被拿掉, 也就是patch期待工作目錄下有 modules目錄, 然後是pictable目錄
-p2, -p3, .... 以此類推
Patch使用方法
Patch表頭
開頭是 ---, +++, 並且接著被比較的檔案
同個patch檔包含多個patch
瀏覽patch檔的方法
less /tmp/file-patch
/---
n
n
n
( /--- 會搜尋---,而n會搜尋下個出現的--- )
Hunk
每個patch的段落稱作 Hunk,每個段落皆以兩個老鼠記號 ( @@ ) 開始, 直至下個段落開始,或者下個patch header為止