Linux 版 (精华区)

发信人: tcpip (偶的昵称改了), 信区: Linux
标  题: Diff and Patch
发信站: 紫 丁 香 (Thu Mar  9 21:51:47 2000) WWW-POST

Diff and Patch



    这两个程序是用于生成补丁和打补丁用的. 他们是广泛的使用于各种的
版本控制系统中, 一般的软件发布也经常使用他们. 因此, 深入了解他们是非常
重要的. 本文只是一个入门级的导引. 详细说明请参照info.

    diff比较两个文本文件, 找到他们的不同之处, 通常是连续的数行不同
, 存在很多的这种东西, 每一个连续的几行被称为一个chunk.

    我们看一看下面的例子.
    a.txt
aaa
bbb
ccc

    b.txt
    ccc
    bbb
aaa

    diff from-file to-file
    diff a b > p
    cat p
    1,2d0
    < aaa
    < bbb
    3a2,3
    > bbb
    > aaa

    patch a < p
    cat a
    ccc
bbb
aaa

    这里的p是一种diff格式, 很古老现在也基本不用了.
    GNU diff提供了两种显示上下文的diff格式. 一种叫作
context format, 另一种叫作unified format. 后一种只有
GNU系统支持, 在GPL的软件中被广泛的使用着, 我也比较喜欢这种
格式.
--------------------------------------------------
一. context format

diff -c a b > p
cat p
*** a Fri Sep 17 10:14:46 1999
--- b Fri Sep 17 10:08:53 1999
***************
*** 1,3 ****
文件a的第一到第三行有不同
- aaa
- bbb
ccc
文件在这里分为两个部分
--- 1,3 ----
文件b的第一到第三行有不同
ccc
+ bbb
+ aaa
这里只有一个chunk

注意: 在这两种context格式种记录了from和to的文件名. 因此
    patch < p 
就可以打补丁了.
他的格式如下:
*** From-File From-File-Modification-Time
--- To-File To-File-Modification-Time
以下列字符开头的有如下意义
! 这一部分有变化 在chunk的两个部分中会有对应的一些行用!标识,
当然, 这两部分中的行数可能不同.
+ 这一行插入第二个文件中
_ 这一行从第一个文件中删除

---------------------------------------------------
二. unified format

diff -u a b > p
cat p

--- From-File From-File-Modification-Time
+++ To-File To-File-Modification-Time
--- a Fri Sep 17 10:14:46 1999
+++ b Fri Sep 17 10:08:53 1999
一个chunk -1,3表示a的1到3行 +1,3表示b的1到3行
@@ -1,3 +1,3 @@
-aaa
-bbb
ccc
+bbb
+aaa 
以'+'开头表示这一行被加入到第一个文件
以'-'开头表示这一行被从第一个文件中删除

打补丁 patch < p
-------------------------------------------------
diff的一些重要的参数:
    -b 忽略行尾的空白
    -w 忽略文件中仅仅是由空白造成的区别
    -B 忽略文件中的空行
    -i 忽略大小写的不同

    -p 对编程语言的特殊支持, 记录有变化的函数名

--------------------------------------------------
patch的一些重要的参数:
    -pn n是一个整数
    表示将补丁文件中文件名的路径部分去掉几个'/'
    当你不指定时, patch将只取出文件名,-p0 表示不修改
    
    如:
    ~/src----- a
|
    |- b 

    diff src/a src/b > p
    cd ~
    patch -p0 < p 可以工作
    patch < p 提示找不到文件
    cd src
    patch < ../p 也可以工作

--------------------------------------------------    
注意:
    如果, 你自己发补丁时, 应该说明是-pnum的num.         

这里作了一个简要的说明, 近一步的了解, 可以看info和man.     

 

--
"这一千多年没写诗了?"
"写了, 不过只写了两句."
"千年得两句, 一定是万古丽句了. 念来听听."
"好吧, 我现丑了" 太白星清了清嗓子, 浑厚的男中音在天庭响起:
大海啊, 都是水;
骏马啊, 四条腿;

※ 来源:·紫 丁 香 bbs.hit.edu.cn·[FROM: freesrc.hit.edu] 
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.117毫秒