在项目中,有些模块是开源的,没有源码或者不能改动源码,想要修复、优化里面的Bug,这时就需要用到patch了。

1.    生成patch  

  制作补丁有两种法法,diff和quilt。

1.1   diff方法制作patch

1.1.1     示例

l  第一步,创建两个文件,test.c源文件和修改后的文件test_1.c。

ubuntu:~/code/test/patch$ cat test.c

aa

bb

ubuntu:~/code/test/patch$ cat test_1.c

aa

bb

l  第二步,生成补丁,diff -u test.c test_1.c > 01_test.patch

ubuntu:~/code/test/patch$ cat 01_test.patch

--- test.c      -- ::43.694824855 +

+++ test_1.c    -- ::08.650825272 +

@@ -, +, @@

 aa

+

+

 bb

1.1.2     diff命令

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

diff [options] from-file to-file

from-file  源文件

to-file       根据源文件修改后的文件

option:

-u 显示有差异行的前后几行(上下文), 默认是前后各3行, 这样, patch中带有更多的信息.

-p显示代码所在的c函数的信息

-N 选项确保补丁文件将正确地处理已经创建或删除文件的情况。

-a逐行比较文本文件

-r比较子目录中的文件

1.2   quilt方式制作patch

quilt是一个制作和应用补丁的工具,它适合于管理较多补丁。

1.2.1     示例

l  第一步,quilt new 02_test.patch新加一个补丁文件

l  第二步,修改文件quilt edit test.c,进入文本框进行文件编辑

aa

bb

^G Get Help           ^O WriteOut           ^R Read File          ^Y Prev Page          ^K Cut Text           ^C Cur Pos

^X Exit               ^J Justify            ^W Where Is           ^V Next Page          ^U UnCut Text         ^T To Spell

l  第三步,quilt refresh将改动保存到patch中。

当前目录下增量了pathc目录,补丁文件02_test.patch即放在了改目录下。

ubuntu:~/code/test/patch$ cat patches/02_test.patch

Index: patch/test.c

===================================================================

--- patch.orig/test.c   -- ::43.694824855 +

+++ patch/test.c        -- ::31.490842723 +

@@ -, +, @@

 aa

+

+

 bb

1.2.2     quilt命令

quilt top      查看最近的一个patch

quilt add {files}    关联文件

quilt remove files   取消关联文件,是add相反的操作

quilt diff    查看对比修改的内容

quilt files       查看当前patch关联的文件

quilt series      查看左右的patch

quilt pop     回退刚才文件的改动

2.    打patch

2.1   示例

l  第一步,存在两个文件,源文件test.c和patch文件01_test.patch

ubuntu:~/code/test/patch$ cat test.c

aa

bb

ubuntu:~/code/test/patch$ cat 01_test.patch

--- test.c      -- ::43.694824855 +

+++ test_1.c    -- ::08.650825272 +

@@ -, +, @@

 aa

+

+

 bb

l  第二步,打patch,patch test.c < 01_test.patch,查看源文件,已经有了补丁上的修改。

ubuntu:~/code/test/patch$ cat test.c

aa

bb

2.2   命令

patch -RE < 01_test.patch 取消patch对源文件的修改

patch -p1 < patch1.diff

p表示跳过几级目录,0标识不去掉为全路径,1标识去掉第一层路径

注意:patch -p后面是不能带负数 的。不使用p参数的时候,patch命令会 忽略 任何目录,直接使用文件。

linux打patch简单示例的更多相关文章

  1. Linux字符设备简单示例

    1. Linux字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,这样的驱动通常实现open.close.read和write系统调用.例如:串口.Led.按键等. 2. 通过字符设备文件 ...

  2. Qt Opencv 在Linux下摄像头简单示例(转)

    下面写的文章也许网上也有类似的,但是大多数都没有给出思路及背景,让初学者每次都只能学到一点皮毛,不少知识需要大量搜索零碎地拼凑起来.题外话,虽然现在是碎片化信息时代,但正是这样信息整合能力也显得非常重 ...

  3. Linux网络编程简单示例

    linux 网络编程是通过socket(套接字)接口实现,Socket是一种文件描述符,socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭& ...

  4. [pthread]Linux C 多线程简单示例

    #include <stdio.h> #include <pthread.h> pthread_mutex_t mutex; pthread_cond_t cond; void ...

  5. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  6. Linux I2C驱动--用户态驱动简单示例

    1. Linux内核支持I2C通用设备驱动(用户态驱动:由应用层实现对硬件的控制可以称之为用户态驱动),实现文件位于drivers/i2c/i2c-dev.c,设备文件为/dev/i2c-0 2. I ...

  7. Linux内核模块简单示例

    1. Linux 内核的整体结构非常庞大,其包含的组件也非常多,使用这些组件的方法有两种: ① 直接编译进内核文件,即zImage或者bzImage(问题:占用内存过多) ② 动态添加 * 模块本身并 ...

  8. 如何实现在Windows上运行Linux程序,附示例代码

    微软在去年发布了Bash On Windows, 这项技术允许在Windows上运行Linux程序, 我相信已经有很多文章解释过Bash On Windows的原理, 而今天的这篇文章将会讲解如何自己 ...

  9. dubbo+zookeeper+springboot简单示例

    目录 dubbo+zookeeper+springboot简单示例 zookeeper安装使用 api子模块 生产者producer 消费者consumer @(目录) dubbo+zookeeper ...

随机推荐

  1. Scratch3.0——作品截图

    原文地址:https://blog.csdn.net/weiwoyonzhe/article/details/86603217 Scratch 的舞台是基于canvas,最初尝试直接通过canvas的 ...

  2. 使用UILabel实现滚动字幕移动效果

    使用UILabel实现滚动字幕移动效果 这个链接中的代码也实现了这种效果 https://github.com/cbpowell/MarqueeLabel 最终效果如下: 原理如下: 1. 获取文本 ...

  3. August 19th 2017 Week 33rd Saturday

    Live for today and stop stressing out about tomorrow. 为今天而活,不必为明天过分担心. Stop bewailing the past misfo ...

  4. January 12 2017 Week 2 Thursday

    Although it rains, throw not away your watering pot. 纵然天下雨,休把水壶丢. Don't throw away your watering pot ...

  5. ZT 打工者买彩票中1000万 5年后变逃犯身上剩80元

    打工者买彩票中1000万 5年后变逃犯身上剩80元   2014-01-07 08:22 来源:都市快报 我有话说 挥霍—— 从800万到80元 在湖南永州零陵区富家桥镇茶叶湾村,陈某是不折不扣的名人 ...

  6. [BZOJ 3441]乌鸦喝水

    3441: 乌鸦喝水 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 374  Solved: 148[Submit][Status][Discuss] ...

  7. pip 使用国内镜像源加速

    现在做开发可是真的不容易,好像不论哪一个语言当你使用到包管理工具的时候都要进行一些网络的配置,否则速度慢如龟,无论是 maven 还是 npm 又或者是我们要说的 pip. 更换国内的源好像已经是必备 ...

  8. UML设计--人月神教

    任务分配 用例图 类图 活动图 状态图 使用工具 所有图都是用VISO编辑出来的,因为VISO是比较经典工具,也是学校电脑自带的.....

  9. MySQL提权之user.MYD中hash破解方法

    经常在服务器提权的时候,尤其是windows环境下,我们发现权限不高,却可以读取mysql的datadir目录,并且能够成功下载user.MYD这个文件.但是在读取内容的时候,经常会遇到root密码h ...

  10. Linux中从oracle官网下载jdk文件不是标准的gzip格式文件问题

    首先你要知道,在linux系统中,文件类型跟后缀名无关,后缀名只是为了方便识别,所以你下载的压缩包可能是tar.gz格式的,也有可能是tar.bz2或tar.xz格式,因为可能别人压缩之后不小心改错了 ...