diff diff [命令行选项] 原始文件 新文件 常用命令行选项如下: -r 递归处理目录 -u 输出统一格式(unified format) -N patch里包含新文件 -a patch里可以包含二进制文件 它的输出在stdout上,所以你可能需要把它重定向到一个文件。diff的输出有“传统格式”和“统一格式”之分,现在大都使用统一格 传统格式示例: [hahalee@builder]$ diff a.txt b.txt 1a2 > here we insert a new line 3d3 < why not this third line? 统一格式示例: [hahalee@builder]$ diff -u a.txt b.txt --- a.txt Thu Apr 6 15:58:34 2000 +++ b.txt Thu Apr 6 15:57:53 2000 @@ -1,3 +1,3 @@ This is line one +here we insert a new line and this is line two -why not this third line? 通过比较可以看出,传统格式的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 patch命令跟diff配合使用,把生成的补丁应用到现有代码上。常用命令行选项: patch [命令行选项] [待patch的文件[patch]] -pn patch level(n是数字) -b[后缀] 生成备份,缺省是.orig 为了说明什么是patch level,这里看一个patch文件的头标记。 diff -ruNa xc.orig/config/cf/Imake.cf xc.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 如果patch成功,缺省是不建备份文件的(注:FreeBSD下的patch工具缺省是保存备份),如果你需要,可以加上 b 开关。这样把修改前的 如果patch失败,patch会把成功的patch行给patch上,同时(无条件)生成备份文件和一个.rej文件。.rej文件里是没有成功提交的patch行,需要手工参照.rej文件的提示patch上去。这种情况在原码升级的时候有可能会发生。 其他相关资源连接: |
|
来自: womking > 《Linux Kernel》