Linux系统生成patch和打patch

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命令会 忽略 任何目录,直接使用文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章