Linux 制作補丁 打補丁 撤銷補丁


1、制作補丁

diff - 逐行比較文件

格式

diff   參數   舊文件/舊文件夾   新文件/新文件夾

-N   將不存在的文件看作是空的

-a   將所有文件都視為文本文件

-u   以合並的方式來顯示文件內容的不同

-r   以遞歸地方式比較所有子目錄

// 比較Test2在Test1版本上的更新並輸出
diff -Naru Test1 Test2
// 比較Test2在Test1版本上的更新並輸出到文件diff.patch
diff -Naru Test1 Test2 > diff.patch
aaron@build:~/test$ cat 1.c
12345
67890
abcdefg
hijklmn
opq
rst
uvw
xyz

aaron@build:~/test$ cat 2.c
12345
67908
abcdefg
ABCDEFG
hijklmn
oq
rst
UVW
xyz

aaron@build:~/test$ diff -Naru 1.c 2.c 
--- 1.c 2018-03-05 02:14:03.687450043 -0500
+++ 2.c 2018-03-05 02:17:19.867441496 -0500
@@ -1,8 +1,9 @@
 12345
-67890            //刪除此行
+67908            //增加此行,等於將67890改為67908
 abcdefg
+ABCDEFG            //新增加
 hijklmn
-opq
+oq
 rst
-uvw
+UVW
 xyz

aaron@build:~/test$ diff -Naru 1.c 2.c > diff.patch

aaron@build:~/test$ ls
1.c  2.c  diff.patch

aaron@build:~/test$ cat diff.patch 
--- 1.c 2018-03-05 02:14:03.687450043 -0500
+++ 2.c 2018-03-05 02:17:19.867441496 -0500
@@ -1,8 +1,9 @@
 12345
-67890
+67908
 abcdefg
+ABCDEFG
 hijklmn
-opq
+oq
 rst
-uvw
+UVW
 xyz

 

2、打補丁

patch - 將一個diff文件應用到一個原始文件

格式

patch   參數   <   補丁

-b   備份原始文件,打補丁時,會復制或者重命名原始文件來備份

-R   撤銷補丁

-p(num)   表示忽略num層路徑

diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c

假設補丁頭是上面一行

如果使用 -p0,就從 / 目錄開始,也就是從 kernel 目錄開始;

如果使用 -p1,就從 drivers 目錄開始,也就是從 kernel/drivers 目錄開始,忽略 kernel 當前目錄下的差異文件;

以此類推。

// 將上面生成的補丁diff.patch打到1.c上,就和2.c相同
aaron@build:~/test$ cat 1.c 
12345
67890
abcdefg
hijklmn
opq
rst
uvw
xyz

aaron@build:~/test$ patch -bp0 < diff.patch 
patching file 1.c

aaron@build:~/test$ cat 1.c
12345
67908
abcdefg
ABCDEFG
hijklmn
oq
rst
UVW
xyz

aaron@build:~/test$ ls
1.c  1.c.orig  2.c  diff.patch     // 1.c.orig備份文件

aaron@build:~/test$ rm 1.c.orig     // 確定打補丁成功后刪除備份文件

 

3、撤銷補丁

patch - 將一個diff文件應用到一個原始文件

格式

patch   參數   <   補丁

-R   撤銷已打的補丁

// 將上一步打的補丁撤銷,還原1.c的初始模樣
aaron@build:~/test$ cat 1.c 
12345
67908
abcdefg
ABCDEFG
hijklmn
oq
rst
UVW
xyz

aaron@build:~/test$ patch -Rp0 < diff.patch 
patching file 1.c

aaron@build:~/test$ cat 1.c 
12345
67890
abcdefg
hijklmn
opq
rst
uvw
xyz

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM