如果hack了开源代码,为了方便分享(如提交Bug)或自己留存使用,一般都要制作一个补丁(Patch)。在从源码安装软件时,也难免要应用些别人做好的补丁。本文介绍如何制作和应用补丁。[1]
目录[隐藏] |
命令简介
用到的两个命令是diff和patch。
diff
diff可以比较两个东西,并可同时记录下二者的区别。制作补丁时的一般用法和常见选项为:
diff 【选项】 源文件(夹) 目的文件(夹)
patch
patch的作用则是将diff记录的结果(即补丁)应用到相应文件(夹)上。最常见的用法为:
patch -pNUM <patchfile>
为了解释 -p 参数,需要看看如下patch文件片段:
--- 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。
应用
利用以上命令,处理单个文件补丁的方法:
# 产生补丁 diff -uN from-file to-file >to-file.patch # 打补丁 patch -p0 < to-file.patch # 取消补丁 patch -RE -p0 < to-file.patch
对整个文件夹打补丁的情况:
# 产生补丁 diff -uNr from-docu to-docu >to-docu.patch # 打补丁 cd to-docu patch -p1 < to-docu.patch # 取消补丁 patch -R -p1 <to-docu.patch
另外,使用版本控制工具时,可以直接用svn diff或git diff生成补丁文件。
值得一提的是,由于应用补丁时的目标代码和生成补丁时的代码未必相同,打补丁操作可能失败。补丁失败的文件会以.rej结尾,下面命令可以找出所有rej文件:
find . -name '*.rej'
patch文件构成
补丁文件里到底存储了哪些信息呢?看看这个例子:
--- test0 2006-08-18 09:12:01.000000000 +0800 +++ test1 2006-08-18 09:13:09.000000000 +0800 @@ -1,3 +1,4 @@ +222222 111111 -111111 +222222 111111
实例分析
单文件补丁
设当前目录有文件 test0:
111111 111111 111111
和文件test1:
222222 111111 222222 111111
使用diff创建补丁test1.patch
diff -uN test0 test1 > test1.patch
因为是单个文件,故不需要 -r 选项。此命令得到如下补丁:
--- test0 2006-08-18 09:12:01.000000000 +0800 +++ test1 2006-08-18 09:13:09.000000000 +0800 @@ -1,3 +1,4 @@ +222222 111111 -111111 +222222 111111
要应用补丁,只需:
$ patch -p0 < test1.patch patching file test0
此时test0就和test1一样了。
如果要取消补丁做出的更改,恢复旧版本:
$ patch -RE -p0 < test1.patch patching file test0
文件夹补丁
设有如下环境:
--prj0/ test0 prj0name --prj1/ test1 prj1name
prj0/prj0name内容为如下三行:
-------- prj0/prj0name --------
prj1/prj1name内容为如下三行:
-------- prj1/prj1name --------
用 diff -uNr 创建补丁,
diff -uNr prj0 prj1 > prj1.patch
得到的patch文件为:
diff -uNr prj0/prj0name prj1/prj0name --- prj0/prj0name 2006-08-18 09:25:11.000000000 +0800 +++ prj1/prj0name 1970-01-01 08:00:00.000000000 +0800 @@ -1,3 +0,0 @@ --------- -prj0/prj0name --------- diff -uNr prj0/prj1name prj1/prj1name --- prj0/prj1name 1970-01-01 08:00:00.000000000 +0800 +++ prj1/prj1name 2006-08-18 09:26:36.000000000 +0800 @@ -0,0 +1,3 @@ +--------- +prj1/prj1name +--------- diff -uNr prj0/test0 prj1/test0 --- prj0/test0 2006-08-18 09:23:53.000000000 +0800 +++ prj1/test0 1970-01-01 08:00:00.000000000 +0800 @@ -1,3 +0,0 @@ -111111 -111111 -111111 diff -uNr prj0/test1 prj1/test1 --- prj0/test1 1970-01-01 08:00:00.000000000 +0800 +++ prj1/test1 2006-08-18 09:26:00.000000000 +0800 @@ -0,0 +1,4 @@ +222222 +111111 +222222 +111111
如果要应用此补丁,则:
$ ls prj0 prj1 prj1.patch $ cd prj0 $ patch -p1 < ../prj1.patch patching file prj0name patching file prj1name patching file test0 patching file test1
此时可用ls看到打补丁后的结果:
$ ls
prj1name test1
类似的,如果要回滚补丁操作:
$ patch -R -p1 < ../prj1.patch patching file prj0name patching file prj1name patching file test0 patching file test1 $ ls prj0name test0
参考资料
本文对您有帮助?分享给更多朋友!
相关推荐
# Linux 下 Patch 的制作与应用详解 ## 一、引言 在 Linux 开发和维护过程中,经常需要对源代码进行修改以适应不同的需求。为了方便地管理这些更改,并能够轻松地将更改应用到新的代码版本中,使用 `patch` 和 `...
总的来说,"PATCH补丁工具 .rar" 提供了一个学习软件补丁开发的实践环境,尤其对易语言初学者而言,这是一个很好的起点,能够帮助他们掌握补丁制作的核心技术,包括动态补丁、特征码补丁和寄存器Hook等高级技巧。...
OpenWRT知识总结(开发教程+补丁patch) OpenWRT是一款基于Linux的路由器操作系统,旨在提供一个高度可定制和灵活的解决方案,满足不同用户的需求。本文档旨在总结OpenWRT的开发教程和补丁patch,帮助开发者和用户...
综上所述,"补丁制作工具2006121321324995.rar" 压缩包涉及了补丁制作的整个过程,包括工具的使用、补丁的生成、测试以及应用等环节,对于软件开发和维护人员来说,理解并掌握这些知识点是至关重要的。
动态补丁工具如BayMax Patch Tools,能够在程序运行时进行修改,无需重新编译或安装整个应用程序,提高了维护效率。 2. **Baymax**: Baymax 是这款补丁工具的核心组件,可能是一个自定义的脚本引擎或者一个包含...
因为在u-boot移植过程中,有几处通用文件要修改,如果每次都要手动修改就太麻烦了。制作补丁可以解决这个问题。本文首介绍一下diff和patch。然后介绍了制作Patch为单个文件和多个文件进行补丁操作的方法。
`patch`工具则是用来应用`diff`生成的补丁文件到原始文件上,实现源文件到目标文件的转换。`-p`选项用于指定路径前缀的层数,例如`-p0`表示从当前目录查找,`-p1`则忽略第一层目录。`-E`选项删除补丁应用后产生的空...
- package patch:与应用或第三方库相关的补丁。 5. **创建Patch的步骤**: - 准备内核源码树并准备源码,使用命令`make target/linux/{clean,prepare} V=s QUILT=1`。 - 进入内核源码顶层目录,并使用`quilt ...
PPF(Patch-Package Format)补丁是一种高效且便捷的方式,允许用户将特定的更改应用到ISO文件上,而无需解压整个ISO并重新打包。这种技术在系统管理员、软件开发者和爱好者之间非常流行,因为它节省了时间和硬盘...
田岛绣花软件是一款在刺绣行业内广泛应用的专业设计与制作工具,主要服务于刺绣爱好者和专业人士。这款软件的版本众多,其中田岛绣花7.0xp是一个针对Windows XP操作系统优化的版本。然而,如同任何软件一样,它可能...
Nine-Patch Editor1_0_0_3是专为Android平台设计的一款强大的9点素材制作工具,它使得开发者和设计师能够高效地创建适应不同屏幕尺寸和分辨率的图像资源。9点切图技术在Android开发中扮演着至关重要的角色,因为它...
3. **编写补丁代码**:使用Win32ASM编写汇编代码,这段代码将在运行时应用到目标内存地址。这可能包括替换原有数据、跳转到新的处理代码或者修改内存保护属性。 4. **加载和执行补丁**:补丁程序运行后,它会找到...
Indigo Rose Visual Patch是一款非常实用的软件补丁包制作工具,软件拥有可视化的用户界面和灵活的用户向导,可以方便用户快速制作出实用又漂亮的软件补丁,一般软件开发人员在对程序进行更新的时候可以使用这款工具...
有时候为了修复uboot中的bug或添加新的功能,开发者需要制作一个补丁(patch),以方便地将修改应用到不同的uboot版本上。 制作uboot补丁的基本步骤如下: 1. 清理工程。在开始制作补丁之前,需要清理之前的所有...
通过应用这个补丁,用户可以避免因编码问题导致的数据显示异常,提高数据交换的兼容性和准确性。对于依赖ArcGIS进行数据处理和共享的用户来说,及时安装这类补丁至关重要,它能有效提升工作效率,减少不必要的数据...
ArcGIS是由Esri公司开发的一款全球领先的地理信息系统(GIS)软件,广泛应用于地理数据分析、地图制作、空间建模等多个领域。ArcGIS 10.2.2是该系列的一个版本,提供了一套全面的工具和技术,使用户能够有效地管理和...
在描述中提到的“工具”可能指的是用于创建、管理和应用补丁的工具,例如patch、 quilt 或者 Git本身。这些工具可以帮助开发者更高效地处理补丁,比如跟踪补丁的应用状态,解决合并冲突,以及在多个补丁之间进行切换...
- **兼容性**:并非所有的patch都适用于所有版本的软件,因此在应用前需确保patch与目标软件的版本匹配。 - **安全风险**:不正确的patch应用或来源不明的patch可能会引入新的安全问题,因此只应使用来自可靠源的...
"winpatch补丁工具"是一个专门用于Windows平台的补丁制作工具,它可以帮助用户将修改后的文件转换为可加载的补丁,尤其适用于游戏或者应用程序的个性化调整。在本案例中,描述提到的是针对"冒险WZ"的补丁制作过程,...
这个名为"ArcGIS-106-DT-DIP-Patch.msp"的压缩文件就是解决这些问题的补丁。它是一个Microsoft Installer(MSI)包,这种类型的安装文件通常用于Windows系统上的软件更新和修复。用户只需下载这个补丁文件,然后在...