原文链接:http://my.oschina.net/fgq611/blog/180750

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

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

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

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

注意:文件夹后面没有斜杠,即是 A_Project而不是 A_Project/ 。

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

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

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

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

备注:若当前目录与 A_Project和B_Project 在同一目录下(如:sourceCode),则可在sourceCode目录下执行如下命令:diff -Naur  A_Project  B_Project > Project.patch 。

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

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

    -p Num 忽略几层文件夹

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

 --- old/modules/pcitable       Mon Sep  ::
+++ new/modules/pcitable Tue Dec ::
如果使用参数 -p0,那就表示从当前目录找一个叫做old的文件夹,再在它下面寻找 modules/pcitable 文件来执行patch操作。

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

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

 $ patch -RE -p1 < Project.patch

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

【生成patch】

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

1. 先切换到 patch分支

1
git checkout patch

2. 生成patch

1
git format-patch -M master

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

【合并patch】

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

1
git am 0002-Release-version-1.4.6.patch

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

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

然后手动commit。

生成和打上patch的方法(转载)的更多相关文章

  1. 如何为Linux生成和打上patch

    通过diff工具生成补丁, patch工具打上补丁. 在使用diff之前, 你需要保留一份未修改过的源码, 然后在其它地方修改源码的一份拷贝. diff对比这两份源码生成patch. 修改过的源码必须 ...

  2. (转载) android studio library生成jar包和aar的方法总结

    android studio library生成jar包和aar的方法总结 标签: android学习文档jar和aar的使用与生成gradle 2016-11-25 10:39 1782人阅读 评论 ...

  3. 分析java中clone()方法 (转载+修改)

    Java中的clone() 方法 java所有的类都是从java.lang.Object类继承而来的,而Object类提供下面的方法对对象进行复制. protected native Object c ...

  4. 自定义类在PropertyGrid上的展示方法

    自定义类在PropertyGrid上的展示方法 零.引言 PropertyGrid用来显示某一对象的属性,但是并不是所有的属性都能编辑,基本数据类型(int, double等)和.Net一些封装的类型 ...

  5. Openstack中用秘钥对(keypair)生成和访问虚机的方法

    Openstack中用镜像文件生成的image来创建虚机(VM或Instance)时, 通常不支持用户名加密码的ssh方式登录访问该VM,而是用秘钥对(keypair)方式. 这里以Centos的镜像 ...

  6. vue-cli+webpack在生成的项目中使用bootstrap方法(二)

    vue-cli+webpack在生成的项目中使用bootstrap方法(一)中,是通过手动下载bootstrap库,然后手动添加到src/assets中,显然是过程太多. 当然是可以更省力些,可以通过 ...

  7. Ui自动化测试上传文件方法都在这里了

    前言 实施UI自动化测试的时候,经常会遇见上传文件的操作,那么对于上传文件你知道几种方法呢?今天我们就总结一下几种常用的上传文件的方法,并分析一下每个方法的优点和缺点以及哪种方法效率,稳定性更高 被测 ...

  8. Openstack中用keypair生成和访问虚机的方法

    Openstack中用keypair生成和访问虚机的方法 标签:task   iso   perm   cte   生成   复制   vol   rsa   sla Openstack中用镜像文件生 ...

  9. iOS开发——网络篇——NSURLSession,下载、上传代理方法,利用NSURLSession断点下载,AFN基本使用,网络检测,NSURLConnection补充

    一.NSURLConnection补充 前面提到的NSURLConnection有些知识点需要补充 NSURLConnectionDataDelegate的代理方法有一下几个 - (void)conn ...

随机推荐

  1. iOS RSA的加密和签名

    1.RSA加密使用服务端给的公钥.pem,RSA签名使用客户端的私钥.pem. 参考文章:http://www.jianshu.com/p/4580bee4f62f 把文件夹导入项目中,然后配置这两个 ...

  2. 【大数据】Hive学习笔记

    第1章 Hive基本概念 1.1 什么是Hive Hive:由Facebook开源用于解决海量结构化日志的数据统计. Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表, ...

  3. Java 8新特性之Stream(八恶人-3)

    “You John Ruth The Hangman” 绞刑者鲁斯·约翰 “When the Hangman catches you, you hang.”当被绞刑者抓住了,你肯定会被绞死 一.基本介 ...

  4. 启动studio报错Gradle error

    在安装cuba studio后,启动时出现了以下错误: Gradle error The version of Gradle you are using does not support the Bu ...

  5. Java Try-with-resources

    目录 资源管理与 Try-Catch-Finally,旧风格 Try-with-resources 管理多个资源 自定义 AutoClosable 实现 Try-with-resources 是 ja ...

  6. IIS发布MVC出错

    一个MVC网站在发布到IIS上时,出现了这个问题: 然后解决办法: 然后应用程序池那里,自己点右键添加一个 新建完应用池之后选中点高级设置 最后,添加网站,添加网站的时候应用程序池选择自己刚刚新建的那 ...

  7. python---django初步了解以及安装(包括Django网页首次无法访问的原因及解决方法,以及在linux服务器上布置无法启动的原因)

    pip install Django 相关网站资源: Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是 ...

  8. LaTeX文章结构

    %导言 %\documentclass{article} %ctexbook \documentclass{ctexbook} \title{\heiti 监督学习} % 黑体 \author{\ka ...

  9. docker重新安装后无法启动

    问题描述: docker版本升级或者重新安装后,无法启动服务,出现如下报错: level=error msg="[graphdriver] prior storage driver over ...

  10. 第一、介绍Canvas

    canvas能做什么? canvas是HTML5中的新元素,你可以使用javascript用它来绘制图形.图标.以及其它任何视觉性图像.它也可用于创建图片特效和动画.如果你掌握了完整的命令,你可以用c ...