diff和patch的使用、patch文件的格式解说

为了弄懂 patch中的 p0   p1    和.orig文件是啥,找到了这篇文章!

来源:http://www.cnblogs.com/super119/archive/2010/12/18/1909941.html

diff和patch的使用、patch文件的格式解说

diff

  diff是生成源码补丁的必备工具。其命令格式为:

 diff [命令行选项] 原始文件 新文件

常用命令行选项如下:

   -r 递归处理目录     -u 输出统一格式(unified format)

   -N patch里包含新文件   -a patch里可以包含二进制文件

  它的输出在stdout上,所以你可能需要把它重定向到一个文件。diff的输出有“传统格式”和“统一格式”之分,现在大都使用统一格式:

  传统格式示例:

   [[email protected]]$ diff a.txt b.txt

   1a2

   > here we insert a new line

   3d3

   < why not this third line?

  统一格式示例:

   [[email protected]]$ 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的时候可以允许行号不精确匹配的情况出现。另外,在patch文件的开头明确地用---和+++标示出原始文件和当前文件,也方便阅读。要选用统一格式,用 u 开关。

  通常,我们需要对整个软件包做修改,并生成一个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命令跟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 xc xc.orig之外,有无简单的方法应用此patch呢?patch level就是为此而设:patch会把目标路径名砍去开头patch level个节(由/分开的部分)。在本例中,可以用下述命令:cd xc; patch _p1 < /pathname/xxx.patch 完成操作。注意,由于没有指定patch文件,patch程序默认从stdin读入,所以用了输入重定向。

  如果patch成功,缺省是不建备份文件的(注:FreeBSD下的patch工具缺省是保存备份),如果你需要,可以加上 b 开关。这样把修改前的文件以“原文件名.orig”的名字做备份。如果你喜欢其它后缀名,也可以用“b 后缀”来指定。

  如果patch失败,patch会把成功的patch行给patch上,同时(无条件)生成备份文件和一个.rej文件。.rej文件里是没有成功提交的patch行,需要手工patch上去。这种情况在原码升级的时候有可能会发生。

  关于二进制文件的说明:binary文件可以原始方式存入patch文件。diff可以生成(加-a选项),patch也可以识别。如果觉得这样的patch文件太难看,解决方法之一是用uuencode处理该binary文件。

时间: 2024-10-03 21:54:14

diff和patch的使用、patch文件的格式解说的相关文章

Patch 21352635 - Database Patch Set Update 11.2.0.4.8

一.CPU和PSU 近日,将数据库从9.2.0.6升级到11.2.0.4后,发现11.2.0.4通过DBLINK访问其他的9i库时发生ORA-02072错误,通过Google找到解决方案,即升级到PSU 11.2.0.4.8,在此,记录一下安装补丁的过程,建议在打补丁前仔细阅读补丁Readme文档的相关章节,有关补丁的所有细节都可以在文档中找到. 关于ORA-02072: ORA-02072: distributed database network protocol mismatch Caus

如何使用git 生成patch 和打入patch 标签: gitpatch【转】

本文转载自:http://blog.csdn.net/liuhaomatou/article/details/54410361 平时我们在使用git 管理项目的时候,会遇到这样一种情况,那就是客户使用git 生成patch 给到我们,那我们就需要把客户给到patch 打入到我们的project ,基于这样一个场景,我把git 如何生成patch 和如何打入patch 做总结   生成patch 的方法:(我这里描述的生成patch 是根据commit 记录生成的) 1.例如首先先通过git lo

如何使用git 生成patch 和打入patch【转】

本文转载自:http://blog.csdn.net/liuhaomatou/article/details/54410361 平时我们在使用git 管理项目的时候,会遇到这样一种情况,那就是客户使用git 生成patch 给到我们,那我们就需要把客户给到patch 打入到我们的project ,基于这样一个场景,我把git 如何生成patch 和如何打入patch 做总结   生成patch 的方法:(我这里描述的生成patch 是根据commit 记录生成的) 1.例如首先先通过git lo

Oracle? Database Patch 19121551 - Database Patch Set Update 11.2.0.4.4 (Includes CPUOct2014) - 傲游云浏览

Skip Headers Oracle? Database Patch 19121551 - Database Patch Set Update 11.2.0.4.4 (Includes CPUOct2014) ? Released: October 14, 2014 This document is accurate at the time of release. For any changes and additional information regarding PSU 11.2.0.4

JAVA程序生成XML文件的格式规范化,缩进,美化。

//开始把Document映射到文件 TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer transFormer = transFactory.newTransformer(); transFormer.setOutputProperty(OutputKeys.INDENT, "yes"); //美化缩进!!!!!!!!!! //设置输出结果 DOMSource domSourc

vim 查看文件二进制格式

用vim打开文件,vim -b file,选项-b是二进制模式打开 然后输入 :%!xxd,就可看到二进制编码 其实在linux下,直接输入xxd file 也是可以看到的文件二进制格式的

wave文件(*.wav)格式、PCM数据格式

1. 音频简介 经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等. 44100HZ 16bit stereo: 每秒钟有 44100 次采样, 采样数据用 16 位(2字节)记录, 双声道(立体声); 22050HZ 8bit  mono: 每秒钟有 22050 次采样, 采样数据用 8 位(1字节)记录, 单声道; 当然也可以有 16bit 的单声道或 8bit 的立体声, 等等. 采样率是指:声音信号在"模→数"转换过程

ELF文件的格式和加载过程

http://blog.csdn.net/lingfong_cool/article/details/7832896 (一) ELF 文件的格式       ELF 文件类型 (1) 可重定位文件( .o 目标文件) : 用于链接创建可执行文件或 so 文件 (2) 可执行文件                     : 用于执行 (3)so( 共享对象 ) 文件            : 用于链接 注 :   一个 Program Header 对应一个 Segment 一个 Section

c# 根据文件流查看文件真实格式

今天在做图片注册的功能的时候,测试提出一个问题:将随便一个非图片文件将后缀名改为jpg或其他,上传时应检验图片合法性.然后同事给提供了根据文件流前两个字节判断文件真实格式的思路,代码如下: public static FileExtension CheckFileType(string fileName) { FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); System.IO.BinaryRead