patch文件是由diff指令(linuxdiff,svndiff,gitdiff,gitformat-patch)生成的。
首先介绍一下diff指令及其常用参数:
diff:
diff的功能就是拿来比较两个文件的不同,然杂记录出来,也就是所谓的diff补丁。句型格式:diff【选项】源文件(夹)目的文件(夹)linux操作系统好吗,就是要给源文件(夹)打个补丁linux 打patch马哥linux,使之弄成目的文件(夹),术语也就是“升级”。下边介绍三个最为常用选项:
-r是一个递归选项,设置了这个选项linux 打patch,diff会将两个不同版本源代码目录中的所有对应文件全部都进行一次比较,包括子目录文件。
-N选项确保补丁文件将正确地处理早已创建或删掉文件的情况。
-u选项以统一格式创建补丁文件,这些格式比缺省格式更紧凑些。
2、patch
------------------
NAME
patch-applyadifffiletoanoriginal
SYNOPSIS
patch[options][originalfile[patchfile]]
butusuallyjust
patch-pnum
------------------
简单的说,patch就是借助diff制做的补丁来实现源文件(夹)和目的文件(夹)的转换。这样说就意味着你可以有源文件(夹)――>目的文件(夹),也可以目的文件(夹)――>源文件(夹)。下边介绍几个最常用选项:
-p0选项要从当前目录查找目的文件(夹)
-p1选项要忽视掉第一层目录,从当前目录开始查找。
类似的-p2选项要忽视第二层目录;
.......
************************************************************
在这儿以实例说明:
---old/modules/pcitableMonSep2711:03:561999
+++new/modules/pcitableTueDec1920:05:412000
假如使用参数-p0,那就表示从当前目录找一个称作old的文件夹,在它下边找寻modules下的pcitable文件来执行patch操作。
假如使用参数-p1,那就表示忽视第一层目录(即不管old),从当前目录找寻modules的文件夹,在它下边找pcitable。这样的前提是当前目录必须为modules所在的目录。而diff补丁文件则可以在任意位置,只要指明了diff补丁文件的路径就可以了。其实,可以用相对路径,也可以用绝对路径。不过我通常习惯用相对路径。
************************************************************
-E选项说明假如发觉了空文件,这么就删掉它
-R选项说明在补丁文件中的“新”文件和“旧”文件如今要调换过来了(实际上就是给新版本打补丁,让它弄成老版本)
patch文件的结构
补丁头
补丁头是分别由---/+++开头的两行,拿来表示要打补丁的文件。---开头表示旧文件,+++开头表示新文件。
一个补丁文件中的多个补丁
一个补丁文件中可能包含以---/+++开头的好多节,每一节拿来打一个补丁。所以在一个补丁文件中可以包含很多个补丁。
块
块是补丁中要更改的地方。它一般由一部份不用更改的东西开始和结束。她们只是拿来表示要更改的位置。她们一般以@@开始,结束于另一个块的开始或则一个新的补丁头。
块的缩进
块会缩进一列,而这一列是拿来表示这一行是要降低还是要删掉的。
块的第一列
+号表示这一行是要加上的。
-号表示这一行是要删掉的。
没有减号也没有负号表示这儿只是引用的而不须要更改。
用法:
patch-p0
patch-p1
以上就是深入了解 patch 文件:diff 指令生成与常用参数解析的详细内容,更多请关注CTO智库其它相关文章!