diff与patch

来源:互联网 发布:新秀丽 怎么样 知乎 编辑:程序博客网 时间:2024/04/29 15:57

1.diff是对两个集合的差运算,diff比较两个文件之间或两个文件集合(目录)文件的差异,并记录下来,生成一个diff文件,这个文件就是我们说的patch文件:

diff oldfile,newfile > out.patch

 

2.那么通过oldfile,patch得到newfile就是打补丁的过程:

patch oldfile out.patch

 

3.如果想通过newfile,patch得到oldfile:

patch -R newfile out.patch

 

4.diff -rc oldfile newfile

-r:当oldfile与newfile为目录时递归调用

-c:out.patch会生成一些额外的信息

 

5.patch文件格式

(1)补丁头:分别由---或+++开头的两行。

---标识oldfile相对文件路径,+++标识newfile相对文件路径

 

(2)块:以@@ - num1,num2 + num3,num4 @@开始,以下一个块的开始或者一个新的补丁头的上一行为结束。

- 标识oldfile,num1标识补丁块在oldfile中的起始位置,num2标识补丁块在oldfile中的最大偏移

+标识newfile,num1标识补丁块在newfile中的起始位置,num2标识补丁块在newfile中的最大偏移

 

块中每一行开头为“-”表示在newfile中将删除这一行,开头为“+”表示在newfile中将添加这一行,没有"-"或"+"的在newfile中保持不变

 

6.patch使用

因为在patch文件的补丁头“---”一行标识了oldfile的文件路径,所以在打补丁时不需要写出oldfile:

patch <out.patch>

如果补丁为diff -rc ./DIR_A/A  ./DIR_B/B > out.patch

在out.patch中为: ---DIR_A/A

而当前目录为./DIR_A/,那么如果打补丁时输入

patch <out.patch

则程序会在./DIR_A/DIR_A/中去寻找文件A,就错了

这时,使用命令patch -p数字 <out.patch将忽略---第数字个"/"前的路径,所以在上述情况下输入

patch -p1 <out.patch则正确

原创粉丝点击