patch过程

patch 过程分三个大的步骤:一是用diff工具比较新旧代码,生成patch文件;二是使用patch命令,将patch文件合并到原有代码;三是检查有无无法patch的文件,修改或重新选择是否对其做patch。


  1、准备测试文件

    [root@lihao work]$ cat test_old

    test old

    [root@lihao work]$ cat test_new

    test new

  2、使用diff创建补丁test.patch

    [root@lihao work]$ diff -uN testnew > test.patch

    【注:因为单个文件,所以不需要-r选项。选项顺序没有关系,即可以是-uN,也可以是-Nu。】

    [root@lihao work]$ ls

    testnew test.patch

  3、patch文件结构

    [root@lihao work]$ cat test1.patch

    — testnew 2012-05-01 22:35:22.000000000 +0800     @@ -1 +1 @@     -lihao old

    +lihao new

  说明:

    补丁头:

    补丁头是分别由—/+++开头的两行,用来表示要打补丁的文件。—开头表示旧文件,+++开头表示新文件。

    块:

    块是补丁中要修改的地方。它通常由一部分不用修改的东西开始和结束。他们只是用来表示要修改的位置。他们通常以@@开始,结束于另一个块的开始或者一个新的补丁头。

    块的缩进:块会缩进一列,而这一列是用来表示这一行是要增加还是要删除的。

    块的第一列

    +号表示这一行是要加上的。

    -号表示这一行是要删除的。

    没有加号也没有减号表示这里只是引用的而不需要修改。

  4、patch文件的使用(让testnew)

    [root@lihao work]$ patch -p0 < test.patch

    patching file test_old

    [root@lihao work]$ cat test_old

    test new

  5、恢复被patch过的文件(撤销test_old的升级)

    [root@lihao work]$ patch -R -p0 < test.patch

    patching file test_old

    [root@lihao work]$ cat test_old

    test old