本文的目的是向Linux新手介绍一种无价的资源,Larry Wall的patch程序。patch是用来查找文件之间差异的GNU diff命令的一个接口;diff有很多选项,但是该命令最常用的用途是用来生成一个文件,该文件中列出了内容发生改变的行,显示两个原始文件、修改过的 行以及由于内容没有变化而忽略掉的行。

patch典型地用于把一个目录下的源代码文件更新到新的版本,从而就避免了下载整个新的源代码档案的必要。

diff 和 patch 是相辅相成的, diff命令产生patch文件, 由patch命令解析执行。

先介绍diff
diff的功能就是用来比较两个文件的不同,然后记录下来,也就是所谓的diff补丁。

格式 : diff[参数][文件1或目录1][文件2或目录2]

参数 : 这里只提几个能和patch一起使用的
-a或--text  diff预设只会逐行比较文本文件。
-N或--new-file  在比较目录时,若文件A仅出现在某个目录中,预设会显示:Only in目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。
-r或--recursive  比较子目录中的文件。
-u,-U或--unified=  以合并的方式来显示文件内容的不同。
-c  显示全部内文,并标出不同之处。

一般就使用  -Nur
产生patch文件
命令diff A B >C ,一般A是原始文件,B是修改后的文件,C称为A的补丁文件。

不加任何参数生成的diff文件格式是一种简单的格式,这种格式只标出了不一样的行数和内容。我们需要一种更详细的格式,可以标识出不同之处的上下文环境,这样更有利于提高patch命令的识别能力。这个时候可以用-c开关。

patch 命令用于打补丁,补丁文件是使用diff产生的
patch就是利用diff制作的补丁来实现源文件(夹)和目的文件(夹)的转换。这样说就意味着你可以有源文件(夹)――>目的文件(夹),也可以目的文件(夹)――>源文件(夹)。

patch 命令语法

patch [  -b [ -B Prefix ] ] [  -f ] [ -l ] [ -N ] [ -R ] [  -s ] [  -v ] [  -c | -e | -n ] [  -d Directory ] [  -D Define ] [  -F Number ] [  -i PatchFile ] [  -o OutFile ] [  -p Number ] [  -r RejectFile ] [  -x Number ] [ File ]

-p0 选项要从当前目录查找目的文件(夹)
-p1 选项要忽略掉第一层目录,从当前目录开始查找。
以此类推

-E 选项说明如果发现了空文件,那么就删除它
-R 选项说明在补丁文件中的“新”文件和“旧”文件现在要调换过来了(实际上就是给新版本打补丁,让它变成老版本)

关于版本控制, 还有一个非常常用的工具 ---- git
不过在git中,我们没有必要直接使用diff和patch来做补丁,这样做既危险又麻烦。
git提供了两种简单的patch方案。一是用git diff生成的标准patch,二是git format-patch生成的Git专用Patch。

这里就不介绍git的用法,网上有大量的资料。我的博客里也有相关介绍。

一 用git diff生成的标准patch
git diff产生标准的diff文件,可以用来产生patch 文件。

例如在master 分支有 a.txt文件

git checkout -b p1 /// 产生一个新分支p1
echo 'abcd' >> a.txt ///
git commit -am "patch p1" /// 产生变化并提交

git diff master  > patch /// 将当前分支与master分支比较,并产生patch文件
git checkout master
git checkout -b p2 /// 产生一个与master相同的分支p2
git apply patch /// 运用patch 文件

git diff p1 /// 此时p1和p2分支相同了。

这里注意, 
1. 用 git diff [分支名,默认是master] > patch 产生补丁(patch)文件。
用 git apply <补丁文件>, 来打补丁。
2. 在那个目录做补丁文件, 就在那个目录应用补丁文件。

二 git format-patch生成的git专用补丁

在对应分支中

git format-patch -M master /// -M 表示要比较的分支

会产生一个 .patch文件
不仅有diff的信息,还有提交者,时间等等,仔细一看你会发现,这是个E-mail的文件,你可以直接发送它!这种patch,我们要用git am来应用。

git am xxxx.patch

(1)兼容性:很明显,git diff生成的Patch兼容性强。如果你在修改的代码的官方版本库不是Git管理的版本库,那么你必须使用git diff生成的patch才能让你的代码被项目的维护人接受。
(2)除错功能:对于git diff生成的patch,你可以用git apply --check 查看补丁是否能够干净顺利地应用到当前分支中;如果git format-patch 生成的补丁不能打到当前分支,git am会给出提示,并协助你完成打补丁工作,你也可以使用git am -3进行三方合并,详细的做法可以参考git手册或者《Progit》。从这一点上看,两者除错功能都很强。
(3)版本库信息:由于git format-patch生成的补丁中含有这个补丁开发者的名字,因此在应用补丁时,这个名字会被记录进版本库,显然,这样做是恰当的。因此,目前使用Git的开源社区往往建议大家使用format-patch生成补丁。

目前先总结这么多。

linux -- patch补丁文件以及相关内容相关推荐

  1. linux/android驱动工程师面试相关内容总结

    理论的东西不常用时就会慢慢的被遗忘,但是找工作就是一个如何让别人相信自己的过程,理论知识就是一个非常重要的途径. 一次次机会在错失,每次想找工作时,刷一下简历就去面试了,一次次因为理论被鄙视,也该长长 ...

  2. linux命令---查找文件中的内容

    linux命令---查找文件中的内容 [yang@localhost ~]$ cat 1.txt |egrep '123456789|second'-------匹配123456789或者second ...

  3. linux diff 补丁文件夹,LINUX下制作补丁文件 diff,patch

    diff(differential) 功能说明:比较文件的差异. 语 法:diff [-abBcdefHilnNpPqrstTuvwy][-;][-C ;][-D ;][-I ;][-S ;][-W ...

  4. buildroot patch 补丁文件使用方法

    在使用 buildroot 编译内核源码时,时常会有修改驱动或第三方包的需求,直接在 output/build/ 下修改源码,make clean 修改内容就会丢失,使用打补丁方式,把补丁包放到pac ...

  5. linux中替换文件中的内容,linux下批量替换文件中的内容linux操作系统 -电脑资料...

    对于单个文件,使用sed命令很容易做到, grep命令可以查找单个文件或文件夹下文件中的内容,使用参数"r"或"-R"可以递归查找指定文件夹下的所有文件:参数& ...

  6. Linux 快速创建文件并写入内容

    Linux 创建文件并写入内容 1.自动创建 test.txt 文件 2.自动写入 "Raspberry" > 创建并写入 >> 追加写入 其他方法: vi vi ...

  7. linux怎么复制文件夹全部内容,linux局域网怎么复制文件夹下的全部文件到另外文件夹...

    在Linux系统局域网中复制或拷贝文件我们可以用cp或者copy命令,但要对一个文件夹中的全部文件复制到另外一个文件夹中去,如何进行操作呢?linux局域网复制文件夹下的全部文件到另外文件夹的方法其实 ...

  8. Linux环境编程(4)文件操作相关内容补充

    Linux环境编程(4) 文件同步: 1.在写入数据时内存与磁盘之间也有一个缓冲区,这种机制降低了磁盘读写次数,提高了读写的效率. 2.但这种机制带来的后果就是磁盘中的数据与实写入的数据不匹配,系统提 ...

  9. linux内存管理的主要概念是虚拟内存,有关linux内存管理机制的相关内容,linux物理内存和虚拟内存,深入了解Linux内存运行 ......

    在linux中空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然. 这是Linux内存管理的一个优秀特性,区别于Windows的内存管理. 主要特点: 无论物理内存有多大,L ...

最新文章

  1. shell sh: 1: matlab: not found 解决方案
  2. 左右侧滑菜单功能的实现
  3. 树莓派Raspberry命令行配置无线网络连接
  4. 回顾线程的竞争机制-重量级锁
  5. 通用方法 Java实现excel表格转成json
  6. python生成器的惰性计算
  7. spyder缩进快捷键
  8. ubuntu 设置虚拟内存 解决内存不足
  9. 计算机显卡更新,电脑显卡升级,教您显卡怎么升级
  10. tmp文件删除会影响计算机吗,电脑临时文件能删吗?
  11. 【数据库自习室#003】Mysql数据库函数
  12. 2016计算机2级试题,2016年计算机二级考试题及答案
  13. iPhone上Siri无法正常回应如何解决?
  14. 可汗学院统计学17-24课笔记
  15. mysql 查询主键和主键列,查询Mysql表名、主键、列名
  16. 学生成绩排名及管理系统c语言,学生成绩管理系统__C语言版.doc
  17. zeppelin源码分析(1)——编译、调试和maven modules分析
  18. 如何解决 conda install 库时报错:The environment is inconsistent, please check the package plan carefully
  19. HTML 中 id、name、class 区别
  20. 测试:面试问题(多精全)

热门文章

  1. Mac Julia 环境 IDE 安装
  2. 【打卡功能实现思路】
  3. 激光切割教程(有线版)
  4. Windows电脑如何滑动关机(Slide To Shut Down)
  5. 对Chrome进行扩展【极简插件】
  6. openWrt编译第一个“Hello_world”应用程序IPK安装包
  7. Access to XMLHttpRequest at ‘http://xx‘ from origin ‘http://xx‘ has been blocked by CORS policy:
  8. python ctypes详解-CTypes
  9. win10 JDK17安装及环境变量配置
  10. re文件管理免root中文版,re管理器免root版本