栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

如何利用diff和patch更新源码

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何利用diff和patch更新源码

关于更新源码的diff与patch命令

参考资料:

①《精通Linux》p17,p279–p280

②《快乐的 Linux 命令行》http://billie66.github.io/TLCL/ p291–p295

③《鸟哥的Linux私房菜,基础3版》p366–p368

diff命令

主要用于比较文件或者目录之间的差异,配合patch命令可以实现不同程序源码版本之间的更改。通常情况下的一个用例是diff程序创建一个diff文件或patch补丁文件,然后patch使用该文件对源码进行更新

diff比较命令有不同的输出风格,这里记录最为常用的统一模式风格,也即使用 -u选项

假设有两个有差异的文件file1.txt和file2.txt,如下所示:

调用diff命令进行比较,输出风格为统一模式

diff -u file1.txt file2.txt
#输出如下所示:

    前两行为文件名和时间戳组成的开头,第一个文件用---做标记,第二个文件用+++做标记第三行的@@ -1,4 +1,4 @@描述了第一个文件的差异存在范围是第1行到第4行,第二个文件的差异存在范围是第1行到第4行,-表示第一个文件,+表示第二个文件第三行之后的字符串是文本行本身,以三种字符开头,代表不同的涵义

    空格表示两个文件均含有改行;-表示从一个文件更新为第二个文件时需要删除改行;+表示从第一个更新为第二个文件时需要添加改行 注意:该补丁文件已经包含了所有的更新/修改策略,所以更新的时候只要能找到该文件就可以进行更新

另外:diff可以工作于任何文本文件,源码、配置文件等等

使用diff命令生成区别文件或补丁文件

diff -Naur old_file new_file > diff_file
#其中old_file和new_file既可以是文件也可以是目录
-N 表示如果是比较目录,若文件A仅出现在某目录中,预设显示为only in.....
-u 表示使用统一模式输出,也即前文所述的模式
-r 表示递归比较子目录
-a 表示逐行比较文本文件

例如:

diff -Naur file1.txt file2.txt > file.patch

接下来就可以利用patch命令和file.patch补丁文件进行更新

patch命令

#更新
patch -pN < patch_file
#还原
patch -R -pN < patch_file

-p 表示忽略N层目录(这个地方有点不好理解,后面会说)
-R 表示将新的文件还原成旧的版本

接着上文:更新file1.txt到file2.txt

#先键入到同时包含file1.txt和file2.txt的目录下,然后再执行命令
patch < file.patch 
#我们没有必要再去指定要更新/修补的目标文件,因为diff文件/file.patch文件中已经在标题行包含了文件名

或者如下命令更新:

-p参数主要用于目录相关的地方,假设有一个补丁文件开头如下所示:

情况1:若当前位于src目录下,则可直接执行如下命令进行更新:

patch -p0 < file.patch
或
patch < file.patch

情况2:若补丁开头与当前环境不同,则可以使用-p适当忽略几层目录

也即若你当前所在的目录为package-3.45,其下有src目录,针对上图的补丁文件,需要忽略第一层的目录

patch -p1 < file.patch
#其中file.patch 也可以使用绝对路径定位到该文件

如果是源码更新完之后,就可以重新编译构建、安装了

make clean main #先清理目标文件,然后构建
make install 	#安装
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/724854.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号