如何為Linux生成和打上patch

2021-05-23 13:50:43 字數 1971 閱讀 1950

通過diff工具生成補丁, patch工具打上補丁.

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

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

1. 為單個檔案生成補丁

diff -up linux-2.6.28.8/net/sunrpc/svc.orig.c linux-2.6.28.8/net/sunrpc/svc.c

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

--- linux-2.6.28.8/net/sunrpc/svc.orig.c 2009-03-17 08:50:04.000000000 +0800

+++ linux-2.6.28.8/net/sunrpc/svc.c 2009-03-30 19:18:41.859375000 +0800

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

引數詳解:

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

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

2. 為多個檔案生成補丁

diff -uprn linux-2.6.28.8.orig/net/sunrpc/ linux-2.6.28.8/net/sunrpc/

這條命令對比了linux-2.6.28.8.orig/net/sunrpc/和linux-2.6.28.8/net/sunrpc/兩個目錄的原始碼差異. 不像只需要單個檔案, 如果修改多個檔案, 那麼就需要拷貝整個linux原始碼樹.

引數詳解:

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

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

3. 打補丁

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

(1. 單個檔案應用補丁

進入檔案所在的目錄並呼叫 patch 命令:

patch < original.patch

這個命令需要原始檔指定了引數  -u ,也就是講,是使用了標準統一的輸出格式.不然在 < 內需要指定檔名

這些命令假定補丁是以統一格式分發的,這種格式指明了補丁要應用到的檔案。如果不是,你可以在命令列裡指定檔案:

patch new.pl < original.patch

(2  應用補丁到整個專案

這個有個不同的地放,是你必須注意設定 p 引數。在補丁檔案裡,需要打補丁的檔案在你電腦上的路徑名跟在建立補丁的電腦上不同。p 告訴 patch 命令忽略掉路徑名的幾個部分以正確的識別檔案。通常p級別為1就夠了,所以你使用:

patch -p1 < original.patch

對於從路徑最開始刪除的每個路徑分隔符(斜線字元)加一,直到剩下的部分存在於你的工作目錄中。最後得到的就是p級別。

要刪除補丁,用-r引數,例如:

生成和打上patch的方法

在團隊開發的過程中,經常需要生成patch,或者打上別人提供的patch,那麼一般情況是如何操作的呢。首先生成patch需要有兩個工程,乙個修改前的a工程,乙個修改後的b工程。使用linux命令diff就可以生成patch了。格式如下 1 diff naur path to a projectpat...

生成和打上patch的方法

在團隊開發的過程中,經常需要生成patch,或者打上別人提供的patch,那麼一般情況是如何操作的呢。首先生成patch需要有兩個工程,乙個修改前的a工程,乙個修改後的b工程。使用linux命令diff就可以生成patch了。格式如下 1 diff naur path to a projectpat...

生成和打上patch的方法

收藏 在團隊開發的過程中,經常需要生成patch,或者打上別人提供的patch,那麼一般情況是如何操作的呢。首先生成patch需要有兩個工程,乙個修改前的a工程,乙個修改後的b工程。使用linux命令diff就可以生成patch了。格式如下 diff naur path to a project p...