我有一个应用程序foobar
,有人为其编写了补丁以添加我喜欢的功能。我该如何使用该补丁?
答案1
补丁通常包含在.diff
文件中,因为补丁是使用diff
命令创建的。
补丁是对源代码的一系列插入和删除。因此,为了使用该补丁,您必须在应用补丁后从源代码构建应用程序(例如“foobar”)。因此,分步骤:
1.获取源码包富巴。
大多数Linux发行版(注意修补并不是Linux所独有的)都有可以用于此目的的“源代码包”,但由于这些是异构的,所以我在这里仅参考原始源代码的格式。原始来源不是发行版的一部分,可能很难找到。维基百科是一个不错的起点,其中包含许多流行应用程序的文章,并且该文章应包含指向带有源下载的主页的链接。显然,你也可以自己谷歌一下。源包将被称为类似foobar.0.1.tar.bz2
.解压它——你现在有一个名为 的目录foobar.0.1
。
2.添加补丁。
有时补丁是单个文件,有时它们是多个文件的集合。将它们复制到foobar.0.1
和中cd foobar.0.1
。接下来,您需要运行该patch
命令。这从标准输入读取,因此您需要通过管道输入文件.diff
。棘手的部分是确定该选项使用什么-p
(如果补丁中没有说明)。为此,您需要查看补丁文件的开头。例如:
--- old/comm.c 2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c 2006-07-07 02:39:24.000000000 +0000
在本例中,comm.c
是将要更改的源文件的名称。但是,请注意它附加了一个目录。由于这些不是同一个目录(“旧”与“新”),这是一个很大的线索,表明路径的这一部分是垃圾(出于我们的目的)。开关的目的-p
(参见man patch
)是消除这个前缀。它需要一个数字,即要消除的斜杠 ( ) 的数量/
,以及介于两者之间的所有内容;在这种情况下,我们将使用-p1
将路径减少为普通的comm.c
。
假设comm.c
实际上位于同一目录中,这将是您的解释是否正确的另一个线索。如果这两行都是src/comm.c
, 并且comm.c
实际上位于src
构建树的子目录中,那么您需要使用-p0
-- 请注意,根本不使用-p
将删除所有斜杠。如果路径是绝对路径(即以 开头/
),那可能就是您想要的。现在应用补丁:
patch -p1 < patch.diff
现在源已被修改。如果还有更多.diff
文件,请以同样的方式应用它们。
3. 构建并安装。
这是从源代码构建某些东西时所经历的正常过程 - 首先./configure
,然后make
,,make check
。make install
在执行最后一项操作之前,如果您已经安装了foobar
,请决定是否要删除或覆盖它,或者如何处理命名冲突。您可能想foobar
参考新的修补版本,而不是旧版本。