分类: LINUX
2015-12-10 23:44:38
原文地址:diff-patch(比较-打补丁命令) 作者:liuminpeng2000
diff比较命令
1.作用:比较2个文件,并生成补丁文件
2.格式:
diff[选项] 文件1 文件2
主要参数:
选项 参数含义
-r 对目录进行递归处理
-q 只报告文件是否有不同,不输出结果
-e,-ed 命令格式
-f RCS(修订控制系统) 命令简单格式
-c,--context 旧版上下文格式
-u,--unified 新版上下文格式
-Z(大写) 调用compress来压缩归档文件,与-x联用时调用compress完成解压缩
文件一:
//hello1.c
#include
int main()
{
printf("Hello!Today is my birthday!\n");
return 0;
}
文件二
//hello2.c
#include
int main()
{
printf("Hello!Today is your birthday!\n");
return 0;
}
1.用旧版上下文比较
在显示有差别的同时还显示该行的上下3行,区别的地方用“!”标出
-e选项的命令符表示:若要把hello1.c变为hello2.c,就需要把hello1.c的第4行,改为图上显示的“printf(“Hello! Today is your birthday!\n”);”
-f 和 –e 显示的内容基本相同,只是数字和字母的顺序调换了,即
4.在diff的选项缺省下,如图:
说明了如何把hello1.c转化为hello2.c的方法,通过“
5.创建补丁文件
创建补丁和缺省的内容是一样的。
注:也可以用旧版上下文格式进行创建:
diff –c hello1.c hello2.c >hello.patch
6. -q 选项只报告文件是否有不同,不输出结果
Path命令
1. 作用:与diff配合使用,把生成的补丁应用到代码上
2. 格式
patch [选项] [待patch的文件 [patch文件]]
常用格式: patch -pnum [patch文件]
常见参数
选项 参数含义
-pnum 剥离文件名中的前num个目录成分
-b 生成备份
-d 把dir设置为解释补丁文件名的当前目录
-e 把输入的补丁文件看作是ed脚本
-t 在执行过程中不要求任何输入
-v 显示patch的版本号
-pnum的含义:去掉num个”/”。例如有路径 home/mp/install/bin 。
p1代表mp/install/bin,去掉1个”/”。
p2代表install/bin, 去掉2个”/”。
p3代表bin, 去掉3个”/”。
成功例子
补丁例子:用旧版上下文创建补丁,然后打补丁
失败例子
# patch hello1.c < hello.patch
(Stripping trailing CRs from patch.)
patching file hello1.c
Hunk #1 FAILED at 4.
1 out of 1 hunk FAILED -- saving rejects to file hello1.c.rej
具体如图
Hello1.c.rej :从这个文件可以知道哪里没打补丁 ,从而手动打上补丁
失败的原因:不能识别补丁文件的格式,,当他不能识别时,可以使用-c/-e/-n/-u指定输入的补丁文件格式。由于只有GNU patch可以创建和读取新版上下文格式的patch文件。所以,除非确定补丁所面向的是使用gnu工具的用户,否则应该使用旧版上下文格式来生成补丁文件
|