Linux下patch的制作和应用 (
来源:互联网 发布:数据结构二维数组赋值 编辑:程序博客网 时间:2024/05/19 10:16
命令简介
用到的两个命令是diff和patch。
diffdiff可以比较两个东西,并可同时记录下二者的区别。制作补丁时的一般用法和常见选项为:
diff 【选项】 源文件(夹) 目的文件(夹) -r递归。设置后diff会将两个不同版本源代码目录中的所有对应文件全部都进行一次比较,包括子目录文件。 -N选项确保补丁文件将正确地处理已经创建或删除文件的情况。 -u输出每个修改前后的3行,也可以用-u5等指定输出更多上下文。 -E, -b, -w, -B, --strip-trailing-cr 忽略各种空白,可参见文档,按需选用。patchpatch的作用则是将diff记录的结果(即补丁)应用到相应文件(夹)上。最常见的用法为:
patch -pNUM <patchfile> -p Num忽略几层文件夹,随后详解。 -E选项说明如果发现了空文件,那么就删除它 -R取消打过的补丁。为了解释 -p 参数,需要看看如下patch文件片段:
如果使用参数 -p0,那就表示从当前目录找一个叫做old的文件夹,再在它下面寻找 modules/pcitable 文件来执行patch操作。
而如果使用参数 -p1,那就表示忽略第一层目录(即不管old),从当前目录寻找 modules 的文件夹,再在它下面找pcitable。
利用以上命令,处理单个文件补丁的方法:
对整个文件夹打补丁的情况:
另外,使用版本控制工具时,可以直接用svn diff或git diff生成补丁文件。
值得一提的是,由于应用补丁时的目标代码和生成补丁时的代码未必相同,打补丁操作可能失败。补丁失败的文件会以.rej结尾,下面命令可以找出所有rej文件:
find . -name '*.rej'patch文件构成
补丁文件里到底存储了哪些信息呢?看看这个例子:
设当前目录有文件 test0:
和文件test1:
使用diff创建补丁test1.patch
因为是单个文件,故不需要 -r 选项。此命令得到如下补丁:
要应用补丁,只需:
此时test0就和test1一样了。
如果要取消补丁做出的更改,恢复旧版本:
设有如下环境:
--prj0/ test0 prj0name --prj1/ test1 prj1nameprj0/prj0name内容为如下三行:
-------- prj0/prj0name --------prj1/prj1name内容为如下三行:
-------- prj1/prj1name --------用 diff -uNr 创建补丁,
得到的patch文件为:
如果要应用此补丁,则:
此时可用ls看到打补丁后的结果:
类似的,如果要回滚补丁操作:
- 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的制作和应用
- 其实我不懂C++
- 在ubuntu 8.10下安装thunderbird中文版
- android中的按键处理
- 程序员技术练级攻略
- 使用xib定制uitalbeViewCell 加载方式
- Linux下patch的制作和应用 (
- 快照更新延迟的原因是什么
- Java关键字abstract
- 解决ubuntu里面的sudo: /etc/sudoers is mode 0640, should be 0440
- Windows PHP环境搭建与配置的注意事项
- 图片数据类型转换 NSImage、CIImage、CGImageRef
- Chapter 1. Heartbeat as a Cluster Messaging Layer Prev Part I. Introduction to Heartbeat
- 对微软CRM日期保存格式的分析
- Chapter 2. Components Prev Part I. Introduction to Heartbeatd