在使用diff之前, 你需要保留乙份未修改過的原始碼, 然後在其它地方修改原始碼的乙份拷貝. diff對比這兩份原始碼生成patch. 修改過的原始碼必須保留原來的檔名, 例如, 如果你修改原始碼中的a.c檔案, 那麼, 修改後的檔案還是名為a.c, 在修改之前你可以複製a.c為a.orig.c進行備份.
$ diff -up linux-
2.6.28.8
/net/sunrpc/svc.orig.c linux-
2.6.28.8
/net/sunrpc/svc.c
這條命令會產生類似如下的輸出, 你將它重定向到乙個檔案中, 這個檔案就是patch.
diff -up linux-
2.6.28.8
/net/sunrpc/svc.orig.c 2009-03
-1708:
50:04.000000000 +
0800++
+ linux-
2.6.28.8
/net/sunrpc/svc.c 2009-03
-3019:
18:41.859375000
+0800
@@ -
1050,11
+1050,11 @@ svc_process(struct
svc_rqst *rqstp)
引數詳解:
-u 顯示有差異行的前後幾行(上下文), 預設是前後各3行, 這樣, patch中帶有更多的資訊.
-p 顯示**所在的c函式的資訊.
$ 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/兩個目錄下的所有原始碼差異.
引數詳解:
-r 遞迴地對比乙個目錄和它的所有子目錄(即整個目錄樹).
-n 如果某個檔案缺少了, 就當作是空檔案來對比. 如果不使用本選項, 當diff發現舊**或者新**缺少檔案時, 只簡單的提示缺少檔案. 如果使用本選項, 會將新新增的檔案全新列印出來作為新增的部分.
生成的補丁中, 路徑資訊包含了你的linux原始碼根目錄的名稱, 但其他人的原始碼根目錄可能是其它名字, 所以, 打補丁時, 要進入你的linux原始碼根目錄, 並且告訴patch工具, 請忽略補丁中的路徑的第一級目錄(引數-p1).
$ patch -p1 < patch1.diff
diff命令必須在整個linux原始碼的根目錄的上一級目錄中執行.
給修改過的核心生成patch,然後用生成的patch給未修改過的核心打補丁
其中,目錄linux-2.6.31.3為未修改過的核心,目錄linux-2.6.31.3_1為修改過的核心
$ diff -uparn linux-
2.6.31.3 linux-
2.6.31.3_1
/> mypatch
$ cd linux-
2.6.31.3
$ patch -p1 < mypatch
git用法 打補丁
1.git cherry pick 作用 從乙個branch上選擇乙個commit,新增該commit到另乙個branch上。1.切換到你想新增commit的分支上。git checkout master2.執行下面的 git cherry pick2.git rebase 作用 git rebas...
linux下打補丁和生成補丁
之前在公司做專案的時候用到了在linux打補丁的技術 呵呵,其實也不是什麼技術說大了就是一條命令 感覺這個還是挺有用的,因為很多原廠都是給出原始碼基礎或是他們修改基礎上的補丁包都我們,讓我們自己打上去來更新一些 的功能的。1 要打補丁的檔案必須是未做任何修改的 這個可以開啟補丁檔案看一下刪除的檔案的...
linux下打補丁和生成補丁
之前在公司做專案的時候用到了在linux打補丁的技術 呵呵,其實也不是什麼技術說大了就是一條命令 感覺這個還是挺有用的,因為很多原廠都是給出原始碼基礎或是他們修改基礎上的補丁包都我們,讓我們自己打上去來更新一些 的功能的。1 要打補丁的檔案必須是未做任何修改的 這個可以開啟補丁檔案看一下刪除的檔案的...