linux通过diff和patch打补丁(教程)

1. 创建2个文件 1.txt 和 2.txt 并在1.txt基础上修改成为2.txt

book@100ask:~/patch$ ls
1.txt  2.txt
book@100ask:~/patch$ cat 1.txt 
111
222
333
book@100ask:~/patch$ cat 2.txt 
111aaa
22
333
444
book@100ask:~/patch$ 

2.使用 diff -uprN 创建1.txt的补丁文件(1.patch)

格式: diff -uprN 原始文件 修改文件 > 1.patch

book@100ask:~/patch$ diff -uprN 1.txt 2.txt > 1.patch
book@100ask:~/patch$ ls
1.patch  1.txt  2.txt

解析diff 命令参数

命令 : diff
-p  //在每一更改处显示c函数,方便程序员定位代码
-u  //按补丁统一格式输出
-r  //递归子目录
-N  //对于不存在的文件或者是空白文件和新增文件,在补丁文件里面包含新的文件内

分析补丁文件(1.patch)

"---" 开头表示原始文件
"+++" 开头表示新文件
"@@" 开头表示补丁文件的范围并以"@@"结尾,-开头表示原始文件的行号范围,+开头表示新文件的行号范围
"+" 开头表示原始文件不存在,在新文件添加
"-" 开头表示原始文件存在,但在新文件删除了
其他的为原始文件和新文件都有的内容

book@100ask:~/patch$ ls 1.patch 1.txt 2.txt book@100ask:~/patch$ cat 1.patch --- 1.txt 2021-05-23 08:09:25.887150622 -0400 //原始文件 +++ 2.txt 2021-05-23 08:13:10.707561369 -0400 //新文件 @@ -1,3 +1,4 @@ -111        //删除内容 -222        //删除内容 +111aaa      //新增内容 +22         //新增内容 333       //不变内容 +444 //新增内容 book@100as

 3.应用补丁文件(patch命令)

patch -p0 < 1.patch

patch 命令参数

patch的作用则是将diff记录的结果(即补丁)应用到相应文件(夹)上。最常见的用法为:
patch -pNUM <patchfile>
-p Num
    忽略几层文件夹,随后详解。 
-E
    选项说明如果发现了空文件,那么就删除它 
-R
    取消打过的补丁。 
为了解释 -p 参数,需要看看如下patch文件片段:
--- old/modules/pcitable       Mon Sep 27 11:03:56 1999
+++ new/modules/pcitable       Tue Dec 19 20:05:41 2000

如果使用参数 -p0,那就表示从当前目录找一个叫做old的文件夹,再在它下面寻找 modules/pcitable 文件来执行patch操作。
而如果使用参数 -p1,那就表示忽略第一层目录(即不管old),从当前目录寻找 modules 的文件夹,再在它下面找pcitable。 

4.取消补丁

patch -R -p0 <1.patch

 

linux通过diff和patch打补丁(教程)

上一篇:Linux使用命令测试硬盘的IO读写性能


下一篇:shell 编程