diff与patch

    技术2022-05-19  19

    1.diff是对两个集合的差运算,diff比较两个文件之间或两个文件集合(目录)文件的差异,并记录下来,生成一个diff文件,这个文件就是我们说的patch文件:

    diff oldfile,newfile > out.patch

     

    2.那么通过oldfile,patch得到newfile就是打补丁的过程:

    patch oldfile out.patch

     

    3.如果想通过newfile,patch得到oldfile:

    patch -R newfile out.patch

     

    4.diff -rc oldfile newfile

    -r:当oldfile与newfile为目录时递归调用

    -c:out.patch会生成一些额外的信息

     

    5.patch文件格式

    (1)补丁头:分别由---或+++开头的两行。

    ---标识oldfile相对文件路径,+++标识newfile相对文件路径

     

    (2)块:以@@ - num1,num2 + num3,num4 @@开始,以下一个块的开始或者一个新的补丁头的上一行为结束。

    - 标识oldfile,num1标识补丁块在oldfile中的起始位置,num2标识补丁块在oldfile中的最大偏移

    +标识newfile,num1标识补丁块在newfile中的起始位置,num2标识补丁块在newfile中的最大偏移

     

    块中每一行开头为“-”表示在newfile中将删除这一行,开头为“+”表示在newfile中将添加这一行,没有"-"或"+"的在newfile中保持不变

     

    6.patch使用

    因为在patch文件的补丁头“---”一行标识了oldfile的文件路径,所以在打补丁时不需要写出oldfile:

    patch <out.patch>

    如果补丁为diff -rc ./DIR_A/A  ./DIR_B/B > out.patch

    在out.patch中为: ---DIR_A/A

    而当前目录为./DIR_A/,那么如果打补丁时输入

    patch <out.patch

    则程序会在./DIR_A/DIR_A/中去寻找文件A,就错了

    这时,使用命令patch -p数字 <out.patch将忽略---第数字个"/"前的路径,所以在上述情况下输入

    patch -p1 <out.patch则正确


    最新回复(0)