您的位置:首页 > 其它

diff 与 patch补充

2010-12-26 10:59 239 查看
 

最近使用diff和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。这样的前提是当前目录必须为modules所在的目录。而diff补丁文件则可以在任意位置,只要指明了diff补丁文件的路径就可以了。当然,可以用相对路径,也可以用绝对路径。不过我一般习惯用相对路径。

那个p0与p1应该只是针对此时需要打补丁的文件而言,目录的忽略也是如此。

第二个

patch文件的结构

补丁头
补丁头是分别由---/+++开头的两行,用来表示要打补丁的文件。---开头表示旧文件,+++开头表示新文件。
一个补丁文件中的多个补丁
一个补丁文件中可能包含以---/+++开头的很多节,每一节用来打一个补丁。所以在一个补丁文件中可以包含好多个补丁。

块是补丁中要修改的地方。它通常由一部分不用修改的东西开始和结束。他们只是用来表示要修改的位置。他们通常以@@开始,结束于另一个块的开始或者一个新的补丁头。
块的缩进
块会缩进一列,而这一列是用来表示这一行是要增加还是要删除的。
块的第一列
+号表示这一行是要加上的。
-号表示这一行是要删除的。
没有加号也没有减号表示这里只是引用的而不需要修改。
************************************************************
 

没有提到的是 @@ -1,3 +1,4 @@这个的意思,后来找了好一会,才找到答案,
网址http://zhuxixi327.javaeye.com/blog/713639 
http://makediff.blog.163.com/blog/static/168821357201091143715997/
-1,3表示原文件的第1行到第3行间;
+1,9表示新文件的第1行到第9行
第3行和第9行,这两个行数不同,表示从源文件到新文件增加了几行。
带加号(+)的行,表示增加的,不带号的,表示原来就有的;

第三
再贴一个示例

在此仅举一个简单的例子来说明如何用diff/patch工具维护源码升级。

假设program-1.0目录中为老版,现开发完成的新版位于program-2.0目录中,将两个目录置于同一父目录下,然后在该父目录上执行:

diff -Nur program-1.0 program-2.0 >program-2.0.patch

将生成一个program-2.0.patch的补丁文件,发布该补丁文件(当然可以先压缩成b
a980
zip2格式)。

假设拿到的是program-2.0.patch.bz2文件,则在program-1.0目录同级执行:

bzcat program-2.0.patch.bz2 | patch -p0

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  patch 工具 2010