Linux系统生成patch和打patch
一、使用diff生成patch
1、创建两个文件,test.c源文件和修改后的文件test_1.c
ubuntu:~/code/test/patch$ cat test.c
aa
bb
ubuntu:~/code/test/patch$ cat test_1.c
aa
11
22
bb
2、生成补丁
(1)、给单个文件生成补丁
diff -up test.c test_1.c > 01_test.patch
(2)、给多个文件
diff -uprN test test_1 > 01_test.patch
参数详解:
-u 显示有差异行的前后几行(上下文), 默认是前后各3行, 这样, patch中带有更多的信息.
-p 显示代码所在的c函数的信息
-r 递归地对比一个目录和它的所有子目录(即整个目录树).
-N 如果某个文件缺少了, 就当作是空文件来对比. 如果不使用本选项, 当diff发现旧代码或者新代码缺少文件时, 只简单的提示缺少文件. 如果使用本选项, 会将新添加的文件全新打印出来作为新增的部分
二、使用patch打补丁
1、存在两个文件,源文件test.c和patch文件01_test.patch
ubuntu:~/code/test/patch$ cat test.c
aa
bb
ubuntu:~/code/test/patch$ cat 01_test.patch
--- test.c 2018-07-20 15:48:43.694824855 +0800
+++ test_1.c 2018-07-20 15:49:08.650825272 +0800
@@ -1,2 +1,4 @@
aa
+11
+22
bb
生成的补丁中, 路径信息包含了你的Linux源码根目录的名称, 但其他人的源码根目录可能是其它名字, 所以, 打补丁时, 要进入你的Linux源码根目录, 并且告诉patch工具, 请忽略补丁中的路径
patch test.c < 01_test.patch
patch -RE < 01_test.patch 取消patch对源文件的修改
patch -p1 < patch1.diff
p表示跳过几级目录,0标识不去掉为全路径,1标识去掉第一层路径
注意:patch -p后面是不能带负数 的。不使用p参数的时候,patch命令会 忽略 任何目录,直接使用文件