文档章节

生成和打上patch的方法

FGQ
 FGQ
发布于 2013/12/02 13:24
字数 558
阅读 10699
收藏 11

在团队开发的过程中,经常需要生成patch,或者打上别人提供的patch,那么一般情况是如何操作的呢。

首先生成patch需要有两个工程,一个修改前的A工程,一个修改后的B工程。

使用linux命令diff就可以生成patch了。格式如下:

diff -Naur path/to/A_Project  path/to/B_Project > Project.patch

   -N 选项确保补丁文件将正确地处理已经创建或删除文件的情况。

   -a 将所有文件都当作文本文件处理。

   -u 输出每个修改前后的3行,也可以用-u5等指定输出更多上下文。

   -r 递归。设置后diff会将两个不同版本源代码目录中的所有对应文件全部都进行一次比较,包括子目录文件。

生成patch以后,在修改前A工程根目录下使用patch命令打上patch。

$ cd path/to/A_Project
$ patch -p1 < Project.patch

    -p Num 忽略几层文件夹

为了解释 -p 参数,需要看看如下patch文件片段:

--- old/modules/pcitable       Mon Sep 27 11:03:56 1999                                          +++ new/modules/pcitable       Tue Dec 19 20:05:41 2000

如果使用参数 -p0,那就表示从当前目录找一个叫做old的文件夹,再在它下面寻找 modules/pcitable 文件来执行patch操作。
而如果使用参数 -p1,那就表示忽略第一层目录(即不管old),从当前目录寻找 modules 的文件夹,再在它下面找pcitable。

如果要取消补丁做出的更改,恢复旧版本,在A工程的根目录下执行以下命令,A工程就会恢复成没有打patch的样子:

$ patch -RE -p0 < Project.patch


由Git管理的工程处理patch的方法:

【生成patch】

分支master 上是没修改前的,分支patch 上是修改以后的打patch的。

1. 先切换到 patch分支

git checkout patch

2. 生成patch

git format-patch -M master

会生成一个文件名如:0002-Release-version-1.4.6.patch 的patch文件

【合并patch】

拿到patch以后,执行下面的命令:

git am 0002-Release-version-1.4.6.patch

如果不想直接commit,那么可以用下面这个命令打patch:

patch -p1 < 0002-Release-version-1.4.6.patch

然后手动commit。









© 著作权归作者所有

共有 人打赏支持
FGQ

FGQ

粉丝 33
博文 19
码字总数 40151
作品 0
武汉
项目经理
私信 提问
git am 部分发生冲突的处理

1.背景 一般而言,为了保留git log的记录,我们在做patch的时候会使用git format patch的命令来生成一个patch,在应用patch的时候会选择git am来打上patch.一般的patch会包含N个文件的补丁,假设...

天王盖地虎626
02/18
0
0
patch: **** malformed patch at line

patch: malformed patch at line 129 出现这中错误,一般是 patch 生成后被手工修改了,如下的patch: 数字6,表示记录了6行原始文件,数字13表示记录了13行目标文件 如果你这时手工加了一行...

Linux_woniu
2018/01/22
0
0
热修复——Tinker的集成与使用

一、简述 Tinker是微信官方的Android热补丁解决方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新。当然,你也可以使用Tinker来更新你的插件。 上面是T...

CSDN_LQR
2017/12/06
0
0
OpenWrt patch方法

一、前言 配置完Openwrt后,首次编译时会在编译过程中下载各种源码包,而且解压这些源码包并打上patch。 需要对源码进行修改时,可直接修改源码并重新编译,但clean后再次编译时会再次解压源...

Linux_woniu
2018/01/10
0
0
Why is "opatch auto" not patching my RAC database home?

Why is "opatch auto" not patching my RAC database home? 操作系统平台root@egapdb2:/#uname -a AIX egapdb2 1 6 00F81BFA4C00 grid和oracle版 11.2.0.3 正确安装了grid和oracle以后(未建......

shaochenshuo
2018/06/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

.net Int16 、(int Int32)、 Int64 的区别

.net Int16 、(int Int32)、 Int64 的区别 easonjim 2015-09-25 01:41:00 浏览129 评论0 Framework html 存储 数据类型 摘要: 关于什么是16位整数,32位整数,64位整数,请看这里:http://ww...

linjin200
25分钟前
1
0
jsch密钥连接远程Linux报错com.jcraft.jsch.JSchException: invalid privatekey: [B@277050dc

jsch密钥连接远程Linux报错,信息如下: Exception in thread "main" com.jcraft.jsch.JSchException: invalid privatekey: [B@277050dcat com.jcraft.jsch.KeyPair.load(KeyPair.java:6......

尚浩宇
25分钟前
2
0
做JAVA开发的同学一定遇到过的爆表问题,看这里解决

背景:Java线上服务运行一周后,某个周六晚上CPU使用率突然持续99%,Java进程处于假死状态,不响应请求。秉着先恢复服务再排查问题的原则,在我连接VPN采用重启大法后,CPU使用率恢复正常,服...

编程SHA
28分钟前
3
0
知乎大佬推荐的4个高质量的微信小程序,每一个都让你用的放心!

很多时候身边的朋友总是见我手机都是很简洁,没有过多的APP去填充,这时他们都会问我,为什么我的手机上软件这么少,够用吗?而我的回答就是,够用,软件不在于多,而在于好用,当然我手机上...

架构师springboot
29分钟前
1
0
初学数据结构--跳跃表

Skip List的工作原理 Skip List(跳跃表)是一种支持快速查找的数据结构,插入、查找和删除操作都仅仅只需要O(log n)对数级别的时间复杂度,它的效率甚至可以与红黑树等二叉平衡树相提并论,...

loubobooo
33分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部