zoukankan      html  css  js  c++  java
  • Linux 制作补丁 打补丁 撤销补丁

    1、制作补丁

    diff - 逐行比较文件

    格式

    diff   参数   旧文件/旧文件夹   新文件/新文件夹

    -N   将不存在的文件看作是空的

    -a   将所有文件都视为文本文件

    -u   以合并的方式来显示文件内容的不同

    -r   以递归地方式比较所有子目录

    // 比较Test2在Test1版本上的更新并输出
    diff -Naru Test1 Test2
    // 比较Test2在Test1版本上的更新并输出到文件diff.patch
    diff -Naru Test1 Test2 > diff.patch
    aaron@build:~/test$ cat 1.c
    12345
    67890
    abcdefg
    hijklmn
    opq
    rst
    uvw
    xyz
    
    aaron@build:~/test$ cat 2.c
    12345
    67908
    abcdefg
    ABCDEFG
    hijklmn
    oq
    rst
    UVW
    xyz
    
    aaron@build:~/test$ diff -Naru 1.c 2.c 
    --- 1.c 2018-03-05 02:14:03.687450043 -0500
    +++ 2.c 2018-03-05 02:17:19.867441496 -0500
    @@ -1,8 +1,9 @@
     12345
    -67890            //删除此行
    +67908            //增加此行,等于将67890改为67908
     abcdefg
    +ABCDEFG            //新增加
     hijklmn
    -opq
    +oq
     rst
    -uvw
    +UVW
     xyz
    
    aaron@build:~/test$ diff -Naru 1.c 2.c > diff.patch
    
    aaron@build:~/test$ ls
    1.c  2.c  diff.patch
    
    aaron@build:~/test$ cat diff.patch 
    --- 1.c 2018-03-05 02:14:03.687450043 -0500
    +++ 2.c 2018-03-05 02:17:19.867441496 -0500
    @@ -1,8 +1,9 @@
     12345
    -67890
    +67908
     abcdefg
    +ABCDEFG
     hijklmn
    -opq
    +oq
     rst
    -uvw
    +UVW
     xyz

    2、打补丁

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

    格式

    patch   参数   <   补丁

    -b   备份原始文件,打补丁时,会复制或者重命名原始文件来备份

    -R   撤销补丁

    -p(num)   表示忽略num层路径

    diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c

    假设补丁头是上面一行

    如果使用 -p0,就从 / 目录开始,也就是从 kernel 目录开始;

    如果使用 -p1,就从 drivers 目录开始,也就是从 kernel/drivers 目录开始,忽略 kernel 当前目录下的差异文件;

    以此类推。

    // 将上面生成的补丁diff.patch打到1.c上,就和2.c相同
    aaron@build:~/test$ cat 1.c 
    12345
    67890
    abcdefg
    hijklmn
    opq
    rst
    uvw
    xyz
    
    aaron@build:~/test$ patch -bp0 < diff.patch 
    patching file 1.c
    
    aaron@build:~/test$ cat 1.c
    12345
    67908
    abcdefg
    ABCDEFG
    hijklmn
    oq
    rst
    UVW
    xyz
    
    aaron@build:~/test$ ls
    1.c  1.c.orig  2.c  diff.patch     // 1.c.orig备份文件
    
    aaron@build:~/test$ rm 1.c.orig     // 确定打补丁成功后删除备份文件

    3、撤销补丁

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

    格式

    patch   参数   <   补丁

    -R   撤销已打的补丁

    // 将上一步打的补丁撤销,还原1.c的初始模样
    aaron@build:~/test$ cat 1.c 
    12345
    67908
    abcdefg
    ABCDEFG
    hijklmn
    oq
    rst
    UVW
    xyz
    
    aaron@build:~/test$ patch -Rp0 < diff.patch 
    patching file 1.c
    
    aaron@build:~/test$ cat 1.c 
    12345
    67890
    abcdefg
    hijklmn
    opq
    rst
    uvw
    xyz
  • 相关阅读:
    PHP实现http与https转化
    HTTP和HTTPS详解
    如何防止SWF文件被反编译
    Swf Decrypt详解
    PCIE体系结构
    windows设备驱动安装指南
    [转]RegOpenKeyEx函数失败的问题
    用Setup系列函数完成驱动卸载安装[驱动安装卸载程序]
    Skipped Rebuild All: Project with VS2008
    LINK : fatal error LNK1000: Internal error during IncrBuildImage
  • 原文地址:https://www.cnblogs.com/lialong1st/p/8509623.html
Copyright © 2011-2022 走看看