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. MetInfo Password Reset Poisoning By Host Header Attack

    if we know some user's email, the we will can reset the user's email by host header attack. The atta ...

  2. 【spring源码系列】之【BeanDefinition】

    1. BeanDefinition简介 前面讲的解析bean标签,本质就是将bean的信息封装成BeanDefinition对象的过程,最后放入容器beanDefinitionMap中.spring ...

  3. 中国石油大学(华东)数学实验(MATLAB)复习

    作者:张世琛 函数的导数 $$ 求函数y=log(x+\sqrt{1+x^2})的一阶和二阶导数 $$ syms x; y=log(x+sqrt(1+x^2)); dydx=diff(y,x); dy ...

  4. git修改远端仓库地址

    git remote set-url origin 远端地址

  5. 一文带你全面了解java对象的序列化和反序列化

    摘要:这篇文章主要给大家介绍了关于java中对象的序列化与反序列化的相关内容,文中通过详细示例代码介绍,希望能对大家有所帮助. 本文分享自华为云社区<java中什么是序列化和反序列化?>, ...

  6. CentOS7 搭建 Redis 集群

    一.手动搭建 1. 准备节点 节点数量至少为 6 个才能保证组成完整高可用的集群 (1) 目录结构 cluster ├── 9001 │   ├── data │   │   ├── appendon ...

  7. .NET 反射(Reflection)

    这节讲一下.NET 中的一个技术:反射(Reflection). 反射是一种很重要的技术,它可以在程序运行时,动态的获取类的实例,并调用实例中的任何方法.它就像一面镜子,映射出一个类的所有细节.    ...

  8. 如何用Vim搭建IDE?

    推荐:http://harttle.com/2015/07/18/vim-cpp.html 转自:http://harttle.com/2015/11/04/vim-ide.html 一年前我从Vim ...

  9. MSSQL·查询存储过程中的关键字

    阅文时长 | 0.22分钟 字数统计 | 408字符 主要内容 | 1.引言&背景 2.声明与参考资料 『MSSQL·查询存储过程中的关键字』 编写人 | SCscHero 编写时间 | 20 ...

  10. grub救援模式

    http://www.jinbuguo.com/linux/grub.cfg.html