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中

 

 

ref:

https://blog.csdn.net/dl0914791011/article/details/17299103

http://www.runoob.com/linux/linux-comm-diff.html

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值