patch檔案是由diff指令(linuxdiff,svndiff,gitdiff,gitformat-patch)產生的。
先介紹一下diff指令及其常用參數:
diff:
diff的功能就是拿來比較兩個檔案的不同,然雜記錄出來,也就是所謂的diff補丁。句型格式:diff【選項】來源檔案(夾)目的檔案(夾)linux作業系統好嗎,就是要給來源檔案(夾)打個補丁linux 打patch馬哥linux,使之弄成目的文件(夾),術語也就是「升級」。下邊介紹三個最常用選項:
-r是一個遞歸選項,設定了這個選項linux 打patch,diff會將兩個不同版本原始碼目錄中的所有對應檔案全部都進行一次比較,包括子目錄檔。
-N選項可確保修補程式檔案將正確處理早已建立或刪掉檔案的情況。
-u選項以統一格式建立補丁文件,這些格式比缺省格式更緊湊。
2、patch
------------------
NAME
patch-applyadifffiletoanoriginal
SYNOPSIS
patch[options][originalfile[patchfile]]
butusuallyjust
patch-pnum
------------------
簡單的說,patch就是藉助diff製成的補丁來實現原始檔案(夾)和目的檔案(夾)的轉換。這樣說就意味著你可以有原始檔案(夾)――>目的檔案(夾),也可以目的檔案(夾)――>來源檔案(夾)。下邊介紹幾個最常用選項:
-p0選項要從目前目錄尋找目的檔案(夾)
-p1選項要忽略掉第一層目錄,從目前目錄開始找。
類似的-p2選項要忽略第二層目錄;
.......
************************************************* ***********
在這裡以實例說明:
---old/modules/pcitableMonSep2711:03:561999
+++new/modules/pcitableTueDec1920:05:412000
假如使用參數-p0,那就表示從目前目錄找一個稱作old的資料夾,在它下邊找尋modules下的pcitable檔來執行patch操作。
假如使用參數-p1,那就表示忽略第一層目錄(即不管old),從目前目錄找尋modules的資料夾,在它下邊找pcitable。這樣的前提是當前目錄必須為modules所在的目錄。而diff補丁檔案則可以在任意位置,只要指明了diff補丁檔案的路徑就可以了。其實,可以用相對路徑,也可以用絕對路徑。不過我通常習慣用相對路徑。
************************************************* ***********
-E選項說明假如發覺了空文件,這樣就刪掉它
-R選項說明在補丁檔案中的「新」檔案和「舊」檔案如今要調換過來了(實際上就是給新版本打補丁,讓它弄成舊版本)
patch檔案的結構
補丁頭
補丁頭是分別由---/+++開頭的兩行,拿來表示要打補丁的檔案。 ---開頭表示舊文件,+++開頭表示新文件。
一個補丁檔案中的多個補丁
一個補丁檔案中可能包含以---/+++開頭的好多節,每一節拿來打一個補丁。所以在一個補丁檔案中可以包含很多個補丁。
塊
塊是補丁中要更改的地方。它一般由一部分不用更改的東西開始和結束。她們只是拿來表示要更改的位置。她們一般以@@開始,結束於另一個塊的開始或則一個新的補丁頭。
塊的縮排
區塊會縮排一列,而這一列是拿來表示這一行是要降低還是要刪除的。
塊的第一列
+號表示這一行是要加上的。
-號表示這一行是要刪除的。
沒有減號也沒有負號表示這兒只是引用的而不須要更改。
用法:
patch-p0 patch-p1
以上是深入了解 patch 檔案:diff 指令產生與常用參數解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!