Linux下生成patch和打patch

2021-07-30 11:10:33 字數 1646 閱讀 9338

**在使用diff之前, 你需要保留乙份未修改過的原始碼, 然後在其它地方修改原始碼的乙份拷貝. diff對比這兩份原始碼生成patch. 修改過的原始碼必須保留原來的檔名, 例如, 如果你修改原始碼中的a.c檔案, 那麼, 修改後的檔案還是名為a.c, 在修改之前你可以複製a.c為a.orig.c進行備份.

1 $ diff -up linux-2.6.28.8/net/sunrpc/svc.orig.c linux-2.6.28.8/net/sunrpc/svc.c > patch

這條命令會產生類似如下的輸出, 你將它重定向到乙個檔案中, 這個檔案就是patch.

1 diff -up linux-2.6.28.8/net/sunrpc/svc.orig.c 2009-03-17

08:50:04.000000000 +0800

2 +++ linux-2.6.28.8/net/sunrpc/svc.c 2009-03-30

19:18:41.859375000 +0800

3 @@ -1050,11 +1050,11 @@ svc_process(struct svc_rqst *rqstp)

引數詳解:

-u 顯示有差異行的前後幾行(上下文), 預設是前後各3行, 這樣, patch中帶有更多的資訊.

-p 顯示**所在的c函式的資訊.

1 $ diff -uprn linux-2.6.28.8.orig/net/sunrpc/ linux-2.6.28.8/net/sunrpc/ > patch

這條命令對比了linux-2.6.28.8.orig/net/sunrpc/和linux-2.6.28.8/net/sunrpc/兩個目錄下的所有原始碼差異.

引數詳解:

-r 遞迴地對比乙個目錄和它的所有子目錄(即整個目錄樹).

-n 如果某個檔案缺少了, 就當作是空檔案來對比. 如果不使用本選項, 當diff發現舊**或者新**缺少檔案時, 只簡單的提示缺少檔案. 如果使用本選項, 會將新新增的檔案全新列印出來作為新增的部分.

生成的補丁中,

路徑資訊包含了你的linux原始碼根目錄的名稱, 但其他人的原始碼根目錄可能是其它名字, 所以, 打補丁時, 要進入你的linux原始碼根目錄, 並且告訴patch工具, 請忽略補丁中的路徑的第一級目錄(引數-p1).

1 $ patch -p1 < patch1.diff

diff命令必須在整個linux原始碼的根目錄的上一級目錄中執行.

給修改過的核心生成patch,然後用生成的patch給未修改過的核心打補丁

其中,目錄linux-2.6.31.3為未修改過的核心,目錄linux-2.6.31.3_1為修改過的核心

1 $ diff -uparn linux-2.6.31.3 linux-2.6.31.3_1/ > mypatch

2 $ cd linux-2.6.31.3

3 $ patch -p1 < mypatch

注意點

1. 打patch時,引數-p1, 是1而不是l. 為什麼忽略第一級目錄,因為工程的下面樹狀結構相同,但是工程名未必相同,所以打patch時候可以通過p1來避免這個問題。這個可以通過檢視patch內容來決定具體執行patch的路徑。

2. 

Linux下生成patch和打patch

通過diff工具生成補丁,patch工具打上補丁.在使用diff之前,你需要保留乙份未修改過的原始碼,然後在其它地方修改原始碼的乙份拷貝.diff對比這兩份原始碼生成patch.修改過的原始碼必須保留原來的檔名,例如,如果你修改原始碼中的a.c檔案,那麼,修改後的檔案還是名為a.c,在修改之前你可以...

Linux下生成patch和打patch

在使用diff之前,你需要保留乙份未修改過的原始碼,然後在其它地方修改原始碼的乙份拷貝.diff對比這兩份原始碼生成patch.修改過的原始碼必須保留原來的檔名,例如,如果你修改原始碼中的a.c檔案,那麼,修改後的檔案還是名為a.c,在修改之前你可以複製a.c為a.orig.c進行備份.diff u...

生成patch和打patch

單個檔案 diff un ori file mdf file mdf file.patch 生成patc 件 patch p0 mdf file.patch 將patch修改應用到源 patch re p0 mdf file.patch 回退patch的修改多個檔案 diff unr ori dir...