zoukankan      html  css  js  c++  java
  • linux打patch简单示例

      在项目中,有些模块是开源的,没有源码或者不能改动源码,想要修复、优化里面的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
    
    11
    
    22
    
    bb

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

    ubuntu:~/code/test/patch$ cat 01_test.patch
    
    --- test.c      2018-07-20 15:48:43.694824855 +0800
    
    +++ test_1.c    2018-07-20 15:49:08.650825272 +0800
    
    @@ -1,2 +1,4 @@
    
     aa
    
    +11
    
    +22
    
     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
    
    11
    
    22
    
    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   2018-07-20 15:48:43.694824855 +0800
    
    +++ patch/test.c        2018-07-20 16:06:31.490842723 +0800
    
    @@ -1,2 +1,4 @@
    
     aa
    
    +11
    
    +22
    
     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      2018-07-20 15:48:43.694824855 +0800
    
    +++ test_1.c    2018-07-20 15:49:08.650825272 +0800
    
    @@ -1,2 +1,4 @@
    
     aa
    
    +11
    
    +22
    
     bb

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

    ubuntu:~/code/test/patch$ cat test.c
    
    aa
    
    11
    
    22
    
    bb

    2.2   命令

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

    patch -p1 < patch1.diff

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

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

     

  • 相关阅读:
    day1 UnicodeEncodeError: 'gbk' codec can't encode character 'xa0' in position 2490: illegal multibyte sequence 错误提示
    day2 Opencv + image
    day1 Opencv安装 python 2.7 (32位)
    2 oracle 实现上下键翻历史命令 rlwrap
    Windows下安装RaibbitMQ
    1. oracle12C的安装
    《万达哲学》------王健林
    MongoDB常用命令
    MongoDB让人恶心的配置
    MongoDB介绍及下载与安装
  • 原文地址:https://www.cnblogs.com/laoxiaobaiup/p/9455088.html
Copyright © 2011-2022 走看看