分类: LINUX
2009-07-16 16:59:01
情景一:你正尝试从代码编译一个软件包,发现有人已经对代码进行了小小的修改以便在你的系统上编译。他们通过补丁的方式发布自己的成果,但是你却不知道该如何使用它。答案是你使用一个叫做patch(很贴切)的行工具将补丁应用到原始代码上。
情景二:你下载了一个开源软件包的代码,花了一个小时左右稍作修改,成功的让它在你的系统上编译通过。你想把自己的成果分享给其他程序员,或者给软件包的作者。现在你就需要创建自己的补丁,你需要的工具是。
这是一份和patch的快速指南,通过讲解它们最常见的用法来帮你解决上面问题。它告诉你的东西足够让你立刻开始使用。之后,你可以在闲暇的时候用manpage来学习diff和patch的前前后后。我总是乐意听到你们的问题和意见。用联系表单跟我取得联系。
用patch应用补丁
要对单个文件应用补丁,进入文件所在的目录并调用patch:
patch < foo.patch
这些假定补丁是以统一格式分发的,这种格式指明了补丁要应用到的文件。如果不是,你可以在命令行里指定文件:
patch foo.txt < bar.patch
应用补丁到整个目录(这种情况也许更常见)也是类似的,但是你必须注意设置p级别。就是说,在补丁文件里,需要打补丁的文件在你电脑上的路径名跟 在创建补丁的电脑上可能不同。p级别告诉patch忽略掉路径名的几个部分以正确的识别文件。通常p级别为1就够了,所以你使用:
patch -p1 < bar.patch
运行该之前,你应该进入源代码目录的顶层目录。如果补丁级别1不能正确识别任何需要打补丁的文件,检查补丁文件里的文件名。如果你看到这样一个文件名:
/users/stephen/package/src/net/http.c
而你当前正工作在一个包含net/http.c的目录,使用:
patch -p5 < bar.patch
总的来说,对于从路径最开始删除的每个路径分隔符(斜线字符)加一,直到剩下的部分存在于你的工作目录中。最后得到的就是p级别。
要删除补丁,用-R参数,例如:
patch -p5 -R bar.patch
使用创建补丁
不论是对于单个文件还是整个源码目录,使用都很简单。为单个文件创建补丁,用下面形式:
-u original.c new.c > original.patch
为整个源码树创建补丁,复制一份源码树:
cp -R original new
在目录new/里进行必要的修改,然后用下面的创建补丁:
-rupN original/ new/ > original.patch
这就是和patch入门需要的所有知识。要获得更多的信息用:
man
man patch