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

 

posted @ 2018-03-05 16:20  LeeAaron  阅读(3179)  评论(0编辑  收藏  举报