zoukankan      html  css  js  c++  java
  • Linux 补丁 的简单使用: 制作补丁,打补丁,撤销补丁

    背景:

    补丁的使用对于嵌入式开发人员来说,在维护或者开发中都比较方便。

    制作补丁:

    diff - 逐行比较文件。

    格式: diff 参数 旧文件/旧文件夹 新文件/新文件夹 (注意顺序 新旧文件夹的顺序)

    diff有很多参数,但是在制作补丁中主要使用以下参数。

    -N   将不存在的文件看作是空的
    
    -a   将所有文件都视为文本文件
    
    -u   以合并的方式来显示文件内容的不同
    
    -r   以递归地方式比较所有子目录
    // 比较Test2在Test1版本上的更新并输出
    diff -Naru Test1 Test2
    // 比较Test2在Test1版本上的更新并输出到文件diff.patch
    diff -Naru Test1 Test2 > diff.patch
    

    例如:

    $ cat a.c1234567890abcdefghijklmnopqrst
    $ cat b.c1234567908abcdefgABCDEFGhijklmnoq
    

    运行看看,只要将其重定向文件就相当于制作成文件:

    $ diff a.c b.c -Naur
    --- a.c 2019-12-26 22:47:23.826403400 +0800
    +++ b.c 2019-12-26 22:47:21.287250500 +0800
    @@ -1,6 +1,6 @@
     12345
    -67890   // -代表删除此行
    +67908   // +增加此行;   先-后+ 相当于等于将67890改为67908
     abcdefg
    +ABCDEFG   // +增加此行
     hijklmn
    -opq     // -代表删除此行
    -rst      // -代表删除此行
    +oq      // +增加此行
    

    只要将其重定向文件就相当于制作成补丁:

    diff -Naru a.c b.c > diff.patch
    

    打补丁:

    patch - 将一个diff文件应用到一个原始文件

    格式:

    patch   参数   <   补丁
    
    -b   备份原始文件,打补丁时,会复制或者重命名原始文件来备份
    
    -R   撤销补丁
    
    -p(num)   表示忽略num层路径
    

    对于文件打补丁

    直接使用以下命令即可:

    patch -b < diff.patch
    

    效果:让a.c 的内容变成与 b.c 一模一样,保留一份后缀为.orig但内容与a.c之前的内容一样的文件。

    对于目录的补丁

    使用 -pN (N代表数字)指定目录的补丁从第几级路径开始。

    kernel_a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c   kernel_b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
    
    假设补丁头是上面一行
    
    如果使用 -p0,就从 / 目录开始,也就是从 kernel_a 目录开始;
    
    如果使用 -p1,就从 drivers 目录开始,也就是从 kernel/drivers 目录开始,忽略 kernel 当前目录下的差异文件;
    
    以此类推。
    

    来到两个差异目录的根目录,输入下面命令,让补丁从根目录开始改动差异

    patch -bp0 < diff.patch 
    

    可以使用 -x 排除指定的路径

    撤销补丁:

    patch - 将一个diff文件应用到一个原始文件

    格式

    patch -R [其他参数] < 补丁

    -R 撤销已打的补丁

  • 相关阅读:
    一个简单的链表结构 分类: C/C++ 数据结构与算法 2015-06-14 16:39 129人阅读 评论(1) 收藏
    整数与浮点数的二进制表示方式 分类: C/C++ 2015-06-13 15:45 54人阅读 评论(0) 收藏
    对string的一些扩展函数 分类: C/C++ 2015-06-12 15:43 170人阅读 评论(1) 收藏
    SQL常用操作 2015-06-12 12:43 20人阅读 评论(0) 收藏
    Google C++编程风格 2015-06-11 11:25 36人阅读 评论(0) 收藏
    C++头文件编译问题 分类: C/C++ 2015-06-10 15:48 32人阅读 评论(0) 收藏
    服务器TIME_WAIT和CLOSE_WAIT详解和解决办法
    解决time_wait过多的问题
    Gdb调试多进程程序
    linux查看硬件配置命令
  • 原文地址:https://www.cnblogs.com/schips/p/12182008.html
Copyright © 2011-2022 走看看