博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
补丁的制作和使用:diff和patch
阅读量:2427 次
发布时间:2019-05-10

本文共 1511 字,大约阅读时间需要 5 分钟。

原理

现在有一个文件file1,通过修改file1得到了文件file2,然后用diff工具比较file1和file2的差异,得到一个补丁文件file.patch,它记录了两个文件的不同之处,patch工具就可以根据这个补丁文件修改file1,从而得到file2。

 

相关工具

diff

diff [options] 源文件 目标文件

diff用于列出两个文件的不同之处,指示如何由源文件变为目标文件,可以用重定向生成补丁文件,注意:diff只能用于比较文本文件。常用选项:

-c,输出一个基于上下文的diff,即提供每处修改的前后机会内容,这样patch命令可以在打补丁前验证上下文是否匹配,而补丁文件也更容易阅读。

-b,忽略空格引起的变化

-B,忽略插入/删除空行引起的变化

-i,忽略大小写

-N,在比较目录时,如果一个文件只在其中一个目录中找到,那它被视为在第二个目录中是一个空文件

-r,在比较目录时,递归比较所有子目录

-u,使用统一的输出格式

 

patch

patch [options]  源文件 补丁文件

patch用于根据补丁文件修改源文件,它会直接改动源文件,打补丁前请注意备份。常用选项:

-R,反向补丁,将已经打了补丁的文件恢复到原来的样子

-p[num],忽略前几层目录,目录的层数由num指定

 

例1:比较两个文件

file1:

[plain]
  1. this is line1  
  2. this is line2   
  3. this is line3  
  4. this is line4  
this is line1this is line2 this is line3this is line4

file2:

[plain]
  1. this is line1  
  2. this is line2 hello  
  3. this is line3  
  4. this is line4  
  5. this is line5  
this is line1this is line2 hellothis is line3this is line4this is line5

执行:

[plain]
  1. diff file1 file2 > file.patch  
diff file1 file2 > file.patch

生成补丁文件file.patch:

[plain]
  1. 2c2  
  2. < this is line2   
  3. ---  
  4. > this is line2 hello  
  5. 4a5  
  6. > this is line5  
2c2< this is line2 ---> this is line2 hello4a5> this is line5
对file1打补丁:

[plain]
  1. patch file1 file.patch  
patch file1 file.patch

file1的内容就变成了file2,如果想把file1变为原来的样子,执行:

[plain]
  1. patch -R file1 file.patch  
patch -R file1 file.patch

 

例2:比较两个目录

在工作路径下有两个目录:doc1和doc2。

执行diff命令,生成补丁文件patch:

[plain]
  1. diff -Nur doc1 doc2 > doc.patch  
diff -Nur doc1 doc2 > doc.patch

用patch工具为doc1打补丁:

[plain]
  1. bash# cd doc1  
  2. bash# patch -p1 < ../doc.patch  
bash# cd doc1bash# patch -p1 < ../doc.patch

 

参考:

用Diff和Patch工具维护源码:  

 

转载地址:http://ojdmb.baihongyu.com/

你可能感兴趣的文章
LC 446. 等差数列划分 II - 子序列
查看>>
LC 53. 最大子序和(DP)+ LC 152. 乘积最大子序列 + LC 238. 除自身以外数组的乘积
查看>>
198. 打家劫舍 DP
查看>>
628. 三个数的最大乘积
查看>>
正向代理和反向代理
查看>>
不同的类加载器加载的类不是同一个类
查看>>
Java 序列化和反序列化
查看>>
怎么让笔记本变路由器,亲身试验可用,不用下第三方软件
查看>>
DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016 解决方案
查看>>
java.util.ConcurrentModificationException
查看>>
linux 通过crt直接上传和下载文件和文件
查看>>
javabase64编码原理和解码,加密案例
查看>>
Java 位运算(移位、位与、或、异或、非) 以及负数的二进制相互计算
查看>>
MyBatis 二级缓存机制
查看>>
第一章,安装Vmware和Ubuntu
查看>>
jquery freemarker模板设置变量每次循环加1
查看>>
VMware虚拟机启动后出现黑屏,不能显示界面,无论安装的是ubuntu还是centos
查看>>
osi七层模型,什么是tcp/ip协议,tcp与http,UDP的区别,tcp三次握手过程和特点
查看>>
第二章,ubuntu系统的查看防火墙,切换root用户,设置固定ip、系统时间等
查看>>
hash原理总结
查看>>