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