源码维护基本命令
一. diff--生成补丁
diff [命令行选项] 源文件 新文件
-r 递归处理相应目录
-N 包含新文件到patch
-u 输出统一格式(unified format),这种格式比缺省更紧凑些
-p 如果不同在函数中,则提示所在函数名
-a 可以包含二进制文件到patch中
-N 视不存在的文件为空文件来比较
-x PATTERN 忽略PATTERN匹配的文件
diff –ruN test1.txt test2.txt > test.patch
二. patch--打补丁
patch -pn(n为自然数) < patch文件
$patch –p<n> <diff_file $cat diff_file | patch –p<n> $bzcat diff_file.bz2 | patch –p<n> $zcat diff_file.gz | patch –p<n> <n>代表按照patch文件的路径忽略的目录级数,每个“/”代表一级。
p0是完全按照补丁文件中的路径查找要修改的文件
p1则使用去掉第一级“/”得到的相对路径,再基于当前目录,到相应的相对路径下查找要修改的文件。
考虑到顶层目录在不同的系统上可能有所不同,要使用这个选项,就要把patch文件放到要被打补丁的目录下,然后在这个目录下运行命令。
如linux-2.6.14 –> linux-2.6.15 => patch-2.6.14.15,打补丁
$bzcat ../patch-2.6.14.15.bz2 | patch –p1 //上一目录 $patch -p0 <patch-2.6.14.15.bz2 //被打补丁的目录
三. quilt--补丁管理
quilt命令同样具有生成补丁和应用补丁的功能,但它的优势是还可以作为管理补丁的工具。一个比较大的项目可能由不同开发者共同维护,其中很多修改都以补丁的方式提供,这些补丁可能存在依赖关系。
quilt工具在源代码目录中生成一个patches/目录,里面存放所有可用的补丁,记录了所有patches的先后顺序,并提供了一系列操作这些补丁的命令。
quilt以栈的形式管理补丁,最先打上的补丁位于栈底,最后打上的补丁位于栈顶(top)。打patch的动作称为push,取消补丁的动作称为pop。就如下图所示,项目中有5个patch,最新的patch为e.patch,所以quilt将这个patch放在栈顶,通过维护这样一个结构,quilt可以继续打新patch或按顺序回退patch。
源代码的patch文件的先后顺序可以查看patches/目录下的series文件。