本文转自 http://blog.chinaunix.net/uid-22848040-id-1767554.html

  diff和patch是一对工具,在数学上来说,diff是对两个集合的差运算,patch是对两个集合的和运算。

diff比较两个文件或文件集合的差异,并记录下来,生成一个diff文件,这也是我们常说的patch文件,即补丁文件。
patch能将diff文件运用于原来的两个集合之一,从而得到另一个集合。举个例子来说文件A和文件B,经过diff之后生成了补丁文件C,那么着个过程相当于 A -B = C ,那么patch的过程就是B+C = A 或A-C =B。
因此我们只要能得到A, B, C三个文件中的任何两个,就能用diff和patch这对工具生成另外一个文件。
这就是diff和patch的妙处。下面分别介绍一下两个工具的用法:
1. diff的用法
diff后面可以接两个文件名或两个目录名。 如果是一个目录名加一个文件名,那么只作用在那么个目录下的同名文件。
如果是两个目录的话,作用于该目录下的所有文件,不递归。如果我们希望递归执行,需要使用-r参数。
命令diff A B >C ,一般A是原始文件,B是修改后的文件,C称为A的补丁文件。
不加任何参数生成的diff文件格式是一种简单的格式,这种格式只标出了不一样的行数和内容。我们需要一种更详细的格式,可以标识出不同之处的上下文环境,这样更有利于提高patch命令的识别能力。这个时候可以用-c开关。
2. patch的用法
patch用于根据原文件和补丁文件生成目标文件。还是拿上个例子来说
patch A C 就能得到B, 这一步叫做对A打上了B的名字为C的补丁。
之一步之后,你的文件A就变成了文件B。如果你打完补丁之后想恢复到A怎么办呢?
patch -R B C 就可以重新还原到A了。
所以不用担心会失去A的问题。
其实patch在具体使用的时候是不用指定原文件的,因为补丁文件中都已经记载了原文件的路径和名称。 patch足够聪明可以认出来。但是有时候会有点小问题。比如一般对两个目录diff的时候可能已经包含了原目录的名字,但是我们打补丁的时候会进入到目 录中再使用patch,着个时候就需要你告诉 patch命令怎么处理补丁文件中的路径。可以利用-pn开关,告诉patch命令忽略的路径分隔符的个数。举例如下:
A文件在 DIR_A下,修改后的B文件在DIR_B下,一般DIR_A和DIR_B在同一级目录。我们为了对整个目录下的所有文件一次性diff,我们一般会到DIR_A和DIR_B的父目录下执行以下命令
diff -rc DIR_A DIR_B >C
这个时候补丁文件C中会记录了原始文件的路径为 DIR_A/A
现在另一个用户得到了A文件和C文件,其中A文件所在的目录也是DIR_A。 一般,他会比较喜欢在DIR_A目录下面进行patch操作,它会执行
patch
但是这个时候patch分析C文件中的记录,认为原始文件是./DIR_A/A,但实际上是./A,此时patch会找不到原始文件。为了避免这种情况我们可以使用-p1参数如下
patch -p1
此时,patch会忽略掉第1个”/”之前的内容,认为原始文件是 ./A,这样就正确了。
最后有以下几点注意:
1. 一次打多个patch的话,一般这些patch有先后顺序,得按次序打才行。
2. 在patch之前不要对原文件进行任何修改
3. 如果patch中记录的原始文件和你得到的原始文件版本不匹配(很容易出现),那么你可以尝试使用  patch, 如果幸运的话,可以成功。大部分情况下,会有不匹配的情况,此时patch会生成rej文件,记录失败的地方,你可以手工修改。
打开patch 文件, 一开始就看得到 path 的路径所在.-p[n] 的 n 值, 只要取消多少条 / 及其左边的路径.以 /usr/src/linux 为例,若
-p0 就是不取消任何路径
-p1 則將 / 取消, 得 usr/src/linux
   -p2 則是將 /usr/ 取消, 得 src/linux
   再以 src/linux 为例:
   -p0 依然为 src/linux
   -p1 则为 linux
如此类推...

例如: patch -p1 <patch-2.4.16

转载于:https://www.cnblogs.com/wlei/archive/2012/08/28/2659909.html

diff和patch工具使用(转)相关推荐

  1. [转] 用Diff和Patch工具维护源码

    在Unix系统下,维护源码版本可以使用很多方法,其中最常用的当然是大名鼎鼎的CVS,但实际上,简单的版本维护工作并没有必要使用复杂的CVS等专门的版本维护工具,Unix标配中的diff和patch工具 ...

  2. 补丁的制作和使用:diff和patch

    原理 现在有一个文件file1,通过修改file1得到了文件file2,然后用diff工具比较file1和file2的差异,得到一个补丁文件file.patch,它记录了两个文件的不同之处,patch ...

  3. 代码打补丁的利器——diff和patch

    一般来说,如果我们在研发过程中需要对代码进行修改,是不需要通过打补丁的方式的,因为我们可以直接改动文件即可.但是如果针对一款要上线的产品,我们总不能在研发的电脑上编译通过后直接发布到线上的.(转载请指 ...

  4. 学会使用 diff 和 patch 命令协同开发

    本文我们就来聊聊,怎么使用 diff 和 patch 命令进行协作开发. 之前我在公司上班的时候,需要经常跟外国同事一起协同开发(之前在外企上班).由于是异地协作,所以沟通几乎全部是通过邮件. 我们有 ...

  5. linux patches工具,patch工具入门

    patch工具入门 Linux中patch和diff工具,成对使用.patch也可以使用git diff生成的patch. 本文简单记录了patch的-p和-R选项的含义及使用. 本文测试目录结构如下 ...

  6. linux rcs文件中的ip,linux学习笔记之diff和patch命令

    关键字:Linux 学习笔记 运维 系统 命令 一.命令的功能 diff命令的功能为逐行比较两个文本文件,列出其不同之处.可是做成diff记录也就是补丁. patch就是利用diff制作的补丁来打到文 ...

  7. linux下diff、patch制作补丁

    http://blog.csdn.net/goldfighter/article/details/6150309 学习资料的收集比较简单,方法一类似于这种初级问题网上资料非常丰富,google或者ba ...

  8. linux——编写Shell脚本常用命令:diff、patch、cut、sort、uniq、、||、test、tr

    diff 和 patch 命令帮助:diff –help | patch –help diff命令在最简单的情况下,比较给定的两个文件的不同.如果使用"-"代替"文件&q ...

  9. Linux中的Diff和Patch

    转自:https://www.cnblogs.com/cocowool/p/6409643.html Linux中的Diff和Patch 本文主要记录两个命令的学习情况:diff 和 patch.di ...

最新文章

  1. SQLite第三课 源码编译错误以及解决
  2. python3+django写的个人笔记博客
  3. SQL语句中各个部分的执行顺序(转)
  4. 【arduino】在Arduino上运行FreeRTOS操作系统,freeRTOS入门教程helloword
  5. C#服务中Process的应用!
  6. c++三五法则(适合学完一遍不怎么清楚的童鞋)
  7. 恢复被CVS被Override and Update后的代码
  8. 前端学习(1883)vue之电商管理系统电商系统之每次只能打开一个菜单项并解决边框问题
  9. 【转载】12项职场缺陷行为你有吗?
  10. android期末大作业_关于大学期末的一点碎碎念
  11. 【keil5】安装及注册
  12. ppc64,ppc64le,ARM,AMD,X86,i386,x86_64(AMD64),AArch64的概念
  13. 介数中心度与紧密中心度_将开发团队与技术紧密结合的6种方法
  14. java实现二维码扫码下载APP
  15. Android中m、mm、mmm、mma、mmma的区别
  16. orientdb 学习
  17. 让源代码成为开发者最宝贵的财富
  18. 产品原型设计教程:墨刀
  19. C程序设计语言(第2版•新版)电子书pdf下载
  20. 非好学校科班出身的程序员,该如何快速提升自己

热门文章

  1. aes js 加盐值 解密_Java已有AES加解密,现需要前端Javascript加密调接口,返回的数据需要解密,目前互..._慕课猿问...
  2. 开发工具:Git 代码回退功能详解,很实用!
  3. 计算机网络基础概念知识笔记
  4. 设计模式:里氏替换原则
  5. MVC下实现LayUI分页的Demo
  6. Android高版本开机广播,android3.1以上,假如程序没有启动过,怎么获取开机广播呢?...
  7. R语言seqm_R语言seq()函数用法
  8. 通过rtcwake命令设置系统S3(休眠到内存)/S4(挂起到硬盘)一段时间后自动唤醒
  9. 根据图片获得配色方案_配色系列(1)—从图片中获得配色灵感
  10. 从头开始vue创建项目_我正在以设计师的身份开始一个被动的收入项目。 从头开始。...