站长资讯网
最全最丰富的资讯网站

Linux中patch的使用解析

在代码开发的过程中常常需要在源码的基础上进行修改,在合并代码的时候一般就会以patch的形式进行提交,那么生成patch和应用patch就需要了解一下了。

所谓的patch其实就是文件对比,在Linux上使用diff命令(ref2)就可以得到patch.具体的命令为

diff -uprN test1/ test2/ > test.patch

上述命令对比了test1路径下和test2路径下的代码差异,如果不需要对比某些内容,则在diff命令后使用–exclude-from=xx,在xx中指明哪些信息无需对比,如git信息等

test1/a.txt

123

123

test2/a.txt

123

123

456

test.patch

diff -uprN test1/a.txt test2/a.txt

+++ test2/a.txt 2018-08-01 14:31:55.000000000 +0800

@@ -1,3 +1,4 @@

123

123

+456

参数详解:

-u 显示有差异行的前后几行(上下文), 默认是前后各3行, 这样, patch中带有更多的信息.

-p 显示代码所在的c函数的信息.

-r 递归地对比一个目录和它的所有子目录(即整个目录树).

-N 如果某个文件缺少了, 就当作是空文件来对比. 如果不使用本选项, 当diff发现旧代码或者新代码缺少文件时, 只简单的提示缺少文件. 如果使用本选项, 会将新添加的文件全新打印出来作为新增的部分.

对比结果产生的test.patch就是我们需要的patch,假设现在需要未某一个未经修改的源码打上我们的patch,如给test1路径下的文件打上patch

cd test1

patch -p1 < test.patch

生成的补丁中, 路径信息包含了你的源码根目录的名称, 但其他人的源码根目录可能是其它名字, 所以, 打补丁时, 要进入你的源码根目录, 并且告诉patch工具, 请忽略补丁中的路径的第一级目录(参数-p1).

这样就可以将test.patch中的内容打到test1/a.txt中

赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号