diff制作补丁文件的原理:告诉我们怎么修改第一个文件后能得到第二个文件。

diff命令常用选项:

-u 输出统一内容的头部信息(打补丁使用),计算机知道是哪个文件需要修改    -r 递归对比目录中的所有资源(可以对比目录)

-a 所有文件视为文本(包括二进制程序)      -N 无文件视为空文件(空文件怎么变成第二个文件)

patch  -pnum(其中num为数字,指定删除补丁文件中多少层路径前缀)

如原始路径为/u/howard/src/blurfl/blurfl.c

-p0则整个路径不变     -p1则修改路径为u/howard/src/blurfl/blurfl.c     -p4则修改路径为blurfl/blurfl.c

-R(reverse)反向修复    -E修复后如果文件为空,则删除该文件

patch对单文件代码打补丁

[root@proxy ~]# cd demo

[root@proxy demo]# vim test1.sh    //v1版本脚本

#!/bin/bash

echo "hello world"

echo "test"

[root@proxy demo]# vim test2.sh   //v2版本脚本

#!/bin/bash

echo "hello the world"

echo "test file"

[root@proxy demo]# diff -u test1.sh test2.sh > test.patch   //diff生成补丁文件

[root@proxy demo]# yum -y install patch       //安装patch软件包

[root@proxy demo]# patch -p0 < test.patch                    //在代码相同目录下为代码打补丁

patching file test1.sh

[root@proxy demo]# patch -RE < test.patch                     //还原旧版本,反向修复

patch对目录下的所有代码打补丁

[root@proxy ~]# mkdir demo

[root@proxy ~]# cd demo

[root@proxy demo]# mkdir {source1,source2}

[root@proxy demo]# echo "hello world"  > source1/test.sh     //source1目录及文件

[root@proxy demo]# cp /bin/find  source1/

[root@proxy demo]#  tree source1/                        //source1目录下2个文件

|-- find

`-- test.sh

[root@proxy demo]# echo "hello the world"  > source2/test.sh    //source2目录及文件

[root@proxy demo]# echo "test" > source2/tmp.txt

[root@proxy demo]# cp /bin/find  source2/

[root@proxy demo]# echo "1" >> source2/find

[root@proxy demo]#  tree source2/                        //source1目录下3个文件

|-- find

|-- test.sh

`-- tmp.txt

[root@proxy demo]# diff -Nuar source1/ source2/ > source.patch   //生成补丁

[root@proxy demo]# ls

source1  source2  source.patch

[root@proxy demo]# cat source.patch                //对比的文件有路径信息

--- source1/test.sh 2018-02-07 22:51:33.034879417 +0800

+++ source2/test.sh 2018-02-07 22:47:32.531754268 +0800

@@ -1 +1 @@

-hello world

+hello the world

[root@proxy demo]# cd source1

[root@proxy source1]# patch  -p1 < ../source.patch

十一、diff和patch打补丁的更多相关文章

  1. diff和patch 打补丁

    在Linux环境下,有两个工具用来给project打补丁,即diff和patch diff         diff具有比较功能.可以使用man命令查看其使用方法. NAME        diff ...

  2. [daily] 使用diff和patch打补丁

    diff org new > xxx.patch patch /path/org xxx.patch /path/org是相对路径时, 会报错. 这是一个bug.

  3. diff生成补丁与patch打补丁

    1.使用diff生成补丁: diff是Linux下的文件比较命令,参数这里就不说了,直接man一下就行了,不仅可以比较文件,也可以比较两个目录,并且可以将不同之处生成补丁文件,其实就是一种打补丁的命令 ...

  4. patch 打补丁,和diff 生成制作补丁

    一.diff 命令: diff命令就是比较两个文件的差异,然后生成差异文件,即补丁文件. 参数:diff --help获得,最常用的 1.-N --new-file 在比较时,如果没有就拿一个空的文件 ...

  5. git apply、git am打补丁.diff 和 .patch【转】

    本文转载自:https://www.jianshu.com/p/e5d801b936b6 前提: 生成patch: git format-patch -M master 生成指定patch,0163b ...

  6. diff和patch的使用、patch文件的格式解说

    为了弄懂 patch中的 p0   p1    和.orig文件是啥,找到了这篇文章! 来源:http://www.cnblogs.com/super119/archive/2010/12/18/19 ...

  7. 【转】Linux下patch打补丁命令

    [转]Linux下patch打补丁命令 转自:http://www.cnblogs.com/noaming1900/archive/2010/10/28/1863282.html 此命令用于为特定软件 ...

  8. Linux下patch打补丁命令

    此命令用于为特定软件包打补丁,他使用diff命令对源文件进行操作. 基本命令语法: patch [-R] {-p(n)} [--dry-run] < patch_file_name p:为pat ...

  9. 关于 diff 和patch

    参考: https://blog.csdn.net/zygblock/article/details/53384862 diff和patch是 版本控制 git 的不可缺少的工具 diff 是用来比较 ...

随机推荐

  1. 【pytest系列】- pytest测试框架介绍与运行

    如果想从头学起pytest,可以去看看这个系列的文章! https://www.cnblogs.com/miki-peng/category/1960108.html 前言​ ​ 目前有两种纯测试的测 ...

  2. Git(2)多人协同操作冲突

    一:多人协同操作冲突 拉取远程dev并在本地创建dev开发库,执行命令git checkout -b  dev  origin/dev  这里以同台机器不同窗口来模拟俩个用户操作同一分支同一文件(实际 ...

  3. 【微信小程序】--bindtap参数传递,配合wx.previewImage实现多张缩略图预览

    本文为原创随笔,纯属个人理解.如有错误,欢迎指出. 如需转载请注明出处 在微信小程序中预览图片分为 a.预览本地相册中的图片. b.预览某个wxml中的多张图片. 分析:实质其实是一样的.都是给wx. ...

  4. OCR-Form-Tools项目试玩记录(一)本地部署

    OCR-Form-Tools是微软的一个开源代码库,包含微软表单识别和OCR服务相关的多种工具.Github仓库地址 目前,表单标注工具(OCR Form Labeling Tool)是首个发布到本该 ...

  5. 常用的HTML标记

    一.格式标记 1.<br> <br>是一个单标记,用来强制换行. 2.<p> <p>是双标记.用来换分段落. 3.<center> < ...

  6. UltraISO制作启动盘安装CentOS7

    UltraISO制作启动盘安装CentOS7 发表于 2020-03-10  |  分类于 DevOps  |  没有评论 简单几个步骤即可完成启动盘的制作,非常便利 准备工具 准备8G优盘(启动盘制 ...

  7. Linux ln命令:在文件之间建立链接(硬链接和软链接)详解版1

    Linux ln命令:在文件之间建立链接(硬链接和软链接)详解版 < Linux创建文件及修改文件时间戳(touch命令)Linux复制文件和目录(cp命令) > <Linux就该这 ...

  8. Shell脚本 /dev/null 2>&1详解

    Shell脚本---- /dev/null 2>&1详解   1.可以将/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. ...

  9. C++ Error 个人笔记(live)

    1.error: invalid conversion from 'char' to 'char*' [-fpermissive] 原因: 把一个字符型的变量赋值给了一个字符型的指针 我的原因: 把 ...

  10. jrebel 插件使用

    最近遇到一件神奇的事情,idea原本配置了热部署,但是修改java文件之后需要重启俩次才能编译成功,网上各种问度娘都没有解决,偶尔看到了jrebel这个插件,折腾了一番,终于完美解决,记录一下,供后来 ...