免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 580 | 回复: 0
打印 上一主题 下一主题

Diff 创建软件补丁,用patch 打补丁 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-06 11:39 |只看该作者 |倒序浏览

diff 是生成源码补丁的必备工具。其命令格式为:
diff [命令行选项] 原始文件新文件
常用命令行选项如下:
-r 递归处理目录-u 输出统一格式(unified format)
-N patch 里包含新文件-a patch 里可以包含二进制文件
它的输出在stdout 上,所以你可能需要把它重定向到一个文件。输出格式保存了上下文(缺省是上下各三行,最少需要两行),这样,patch 的时候可以允许行号不精确匹配的情况出现。另外,在patch 文件的开头明确地用---和+++标示出原始文件和当前文件,也方便阅读。
通常,我们需要对整个软件包做修改,并生成一个patch 文件,下面是典型的操作过程。
tar xzvf software.tar.gz # 展开原始软件包,其目录为software
cp _a software software-orig # 做个修改前的备份
cd software
[修改,测试……]
cd ..
diff -ruNa software-orig software > software-my.patch
现在我们就可以保存software-my.patch 做为这次修改的结果,至于原始软件包,可以不必保存。等到下次需要再修改的时候,可以用patch 命令把这个补丁打进原始包,再继续工作。比如是在linux kernel 上做的工作,就不必每次保存几十兆修改后的源码了。这是好处之一,好处之二是维护方便,由于unified patch格式有一定的模糊匹配能力,能减少原软件包升级带来的维护工作量。
patch
patch 程序根据补丁(patch)文件修改一个文件。补丁文件通常是使用diff 程序建立的一个列表,这个列表包含如何修改原始文件的一些指令。由于节省时间和空间,Patch 经常用于源代码的修补。
可以想象一个有1MB 的程序包,这个程序包的下一个版本仅仅改变了前面一个版本的两个文件的内容,这个新版本可以完全以一个1MB 的新版本进行发布或者以一个仅仅有1KB 的补丁文件进行发布。这个补丁文件可以对第一个版本的进行更新,更新后的版本就和第二个版本完全一致了。因此,如果已经下载了第一个版本,那么为了下一个版本而进行的大数据量下载工作就可以有效地避免。
常用命令行选项:
patch [命令行选项] [待patch 的文件[patch]]
-pn patch level(n 是数字) -b[后缀] 生成备份,缺省是.orig,为了说明什么是patch level,这里看一个patch 文件的头标记。
diff -ruNa xc.orig/config/cf/Imake.cfxc.bsd/config/cf/Imake.cf
--- xc.orig/config/cf/Imake.cf Fri Jul 30 12:45:47 1999
+++ xc.new/config/cf/Imake.cf Fri Jan 21 13:48:44 2000
这个patch 如果直接应用,它会去找xc.orig/config/cf 目录下的Imake.cf 文件,假如你的源码树的根目录是缺省的xc 而不是xc.orig,除了mv xc xc.orig 之外,有无简单的方法应用此patch 呢?patch level 就是为此而设:patch 会把目标路径名砍去开头patch level 个节(由/分开的部分)。在本例中,可以用下述命令:
cd xc; patch -p1 patch20020523.patch


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/65250/showart_1891043.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP