linux下patch的制作与应用
来源:互联网 发布:ftp.redflag linux 编辑:程序博客网 时间:2024/06/06 19:07
只要是产品性的程序开发,就无法避免版本更新,bug修正等。在linux下,提供了diff和patch这样一对配套工具来制作和应用补丁程序,以方便版本演进和代码修正。
diff和patch的配套典型用法有如下三种:
1. 为单个文件制作和打补丁。
2. 为整个项目(修改了多个目录下的多个文件)制作和打补丁。
3. 使用别人制作好的补丁程序给自己的项目打上该补丁程序。
本文第一部分实例讲解上述三种用法。每二部分再详细介绍diff和patch各个参数的意义。
I.diff和patch的用法实例
1. 为单个文件制作和打补丁
- #diff xxx_original.ext xxx_modified.ext > xxx.patch
- #patch xxx_original.ext < xxx.patch
意即: xxx_modified.ext = xxx_orginal.ext + xxx.patch
如果你怀疑补丁程序"xxx.patch"可能有问题,想回滚到补丁之前的版本。则可以使用"-R"选项做到。
- patch -R xxx_modified.ext < xxx.patch
2. 为整个项目(因为修改了项目下多个目录下的多个文件)制作和应用补丁
应用场景设定为:
project_original : 为要打补丁的项目目录名;
project_modified : 为修改了多个目录下多个文件的项目目录名;
目的是想制作一个补丁程序,将"project_modified"中你所做的修改都更新到"project_original"中去。为达到这个目的,可以操作如下:
- #diff -Nur project_orginal/ project_modified/ > project.patch
- #cp project.patch project_original/
- #cd project_original/
- #patch -p1 < project.patch
实现如下:
- # diff -Nur ffmpeg-0.10/ ffmpeg-0.8.5.verified/ >ffmpeg-0.8.5.diff
- # cp ffmpeg-0.8.5.diff ./ffmpeg-0.10
- # cd ffmpeg-0.10
- # patch -p1 <ffmpeg-0.8.5.diff
- #cp xxx.patch project/
- #cd project/
- #patch -p1 < xxx.patch
- #patch -R -p1 < xxx.patch
II. diff和patch的参数解释
(本小段摘自http://linux.ccidnet.com/art/3067/20070418/1064163_1.html)
1.diff
NAME
diff - find differences between two files
SYNOPSIS
diff [options] from-file to-file
简单的说,diff的功能就是用来比较两个文件的不同,然后记录下来,也就是所谓的diff补丁。语法格式:diff 【选项】 源文件(夹) 目的文件(夹),就是要给源文件(夹)打个补丁,使之变成目的文件(夹),术语也就是“升级”。下面介绍三个最为常用选项:
-r 是一个递归选项,设置了这个选项,diff会将两个不同版本源代码目录中的所有对应文件全部都进行一次比较,包括子目录文件。
-N 选项确保补丁文件将正确地处理已经创建或删除文件的情况。
-u 选项以统一格式创建补丁文件,这种格式比缺省格式更紧凑些。
2. patch
NAME
patch - apply a diff file to an original
SYNOPSIS
patch [options] [originalfile [patchfile]]
but usually just
patch -pnum
简单的说,patch就是利用diff制作的补丁来实现源文件(夹)和目的文件(夹)的转换。这样说就意味着你可以有源文件(夹)――>目的文件(夹),也可以目的文件(夹)――>源文件(夹)。下面介绍几个最常用选项:
-p0 选项要从当前目录查找目的文件(夹)
-p1 选项要忽略掉第一层目录,从当前目录开始查找。
在这里以实例说明:
--- 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。这样的前提是当前目录必须为modules所在的目录。而diff补丁文件则可以在任意位置,只要 指明了diff补丁文件的路径就可以了。当然,可以用相对路径,也可以用绝对路径。不过我一般习惯用相对路径。
-E 选项说明如果发现了空文件,那么就删除它
-R 选项说明在补丁文件中的“新”文件和“旧”文件现在要调换过来了(实际上就是给新版本打补丁,让它变成老版本)
- linux下patch的制作与应用
- linux下补丁(patch)的制作与应用
- Linux下patch的制作和应用
- Linux下patch的制作和应用
- Linux下patch的制作和应用
- Linux下Patch的制作和应用
- Linux下patch的制作和应用
- Linux下patch的制作和应用
- Linux下patch的制作和应用
- Linux下patch的制作于应用
- Linux下patch的制作和应用
- Linux下patch的制作和应用
- Linux 下 patch 的制作和应用
- Linux下patch的制作和应用
- Linux下patch的制作和应用
- Linux下patch的制作和应用
- Linux下patch的制作和应用
- Linux下patch的制作和应用
- Linux命令行下编辑常用的快捷键
- 史上最简最快速的FTP server(vsftpd) 架设
- 设置RedHat 的 root 初始密码
- patch的man帮助文档的翻译
- diff的man帮助文档翻译
- linux下patch的制作与应用
- VS2010 调用的目标发生了异常
- MPEG2-TS音视频同步原理
- leetcode Jump Game II
- rtmpdump移植到 Windows VS2008 下的移植日志
- Real Time Messaging Protocol Chunk Stream(RTMP数据块流)
- RTMP Commands Messages (RTMP命令消息)
- RTMP Message Formats (RTMP消息格式)
- RTMP 简介