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毫秒