[转] diff & patch

本文详细介绍了diff工具如何比较两个文本文件的区别,并将不同之处输出。同时讲解了patch工具如何读取diff的输出来更新源文件。文章还探讨了这两种工具的不同选项及应用场景,特别是与版本控制系统CVS的结合使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


转自:http://www.myfaq.com.cn/2005September/2005-09-13/201252.html

diff 以行为单位比较两个文本文件(或者是目录),并将不同之处输出到标准输出上,
patch可以读入这些输出,并按照一定的指令使源文件(目录)更新

diff 以行为单位比较两个文本文件(或者是目录),并将不同之处输出到标准输出上,
patch可以读入这些输出,并按照一定的指令使源文件(目录)更新
diffutils-2.7.2-2
patch-2.5.4-10

1, diff
options:
-r --recursive
-p --show-c-function //标识不同之处所在的函数名(只用于C程序)
-e --ed //ed 命令格式 diff -e test1 test2
 //混合ed命令格式(无参数) diff test1 test2
-f      //RCS命令简单格式       diff -f test1 test2        Revision Control System
-c --context //旧版上下文格式   diff -c test1 test2
-u --unified //新版上下文格式   diff -u test1 test2
-N          //如果某个文件只在一个目录中出现,则假定在另一个目录中为空文件.

diff的输出格式有三种:列举方式,命令模式,上下文模式
命令模式有:ed命令模式和RCS(Revision Control System)
上下文模式有:旧版和新版
命令模式记录的是从test1更新到test2所需要执行的命令,而上下文模式可读性更好一些.
Linux内核源代码就是按照新版上下文模式用diff组织的,
eg. diff -Nur linux-2.4.15 linux

2. patch
patch [options] [originalfile] [patchfile]
如果patchfile为空,则从标准输入读取
一般使用下面的形式:
patch -p[num] < patchfile
如果不提供p参数将忽略所有的目录信息,
-p0表示使用全部的路径信息
-p1表示忽略第一"/"以前的目录,依次类推

patch可以直接操作上下文格式以及混合ed格式的diff输出文件,而将ed格式文件通过管道提交给ed程序,
不清楚如何处理RCS格式文件.

eg.
bzcat linux-2.6.1.patch.bz2 | patch -p0

如果希望恢复到原来的版本可以使用 -R (--reverse)参数
但是只对上下文格式的diff文件有效.
eg. patch -R < program-1.2.patch

3. diff-patch和CVS的配合使用
在这种情况下,注意不要把CVS目录包括进去
eg.
patch -Nur program-1.0 program-1.1 --exclude=CVS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值