Patch打补丁学习笔记
1.基本命令语法:
patch [-R] {-p(n)} [--dry-run] < patch_file_name
p:为path的缩写。
n:指将patch文件中的path第n条’/’及其左边部分取消。
-R:卸载patch包。
--dry-run:尝试patch软件,并不真正修改软件。
例如:
$ patch -p1 < /home/sense/patch-2.6.19.1 安装补丁
$ patch -p1 -R < /home/sense/patch-2.6.19.1 卸载补丁
例如:
0002-main.patch main.c
diff --git a/src/core/main.c b/src/core/main.c
如果这两个文件在同目录下,那么就要省略三层目录(目录路径中有三个"/"),因此打补丁命令为:
$ patch -p3 < 0002-main.patch
2.假如发现某个项目有bug代码,而自己又没有svn的提交权限,那么此时最合适的解决方法就是用diff命令做一个补丁发给项目成员。项目成员通过patch命令可以立刻知道你的意图。
3.实验
$ diff -Naur old new > foo.patch
其中-Naur参数属于固定打法,不管是对一个文件,还是对一个目录,在使用这个参数基本就可以了。
$ patch -p0 < foo.patch (或者进入下层目录,$ patch -p1 < ../foo.patch )
如果再次使用会提示是否还原,输入y就还原。
如果你想严格指定是应用补丁可以使用下面命令(就是增加N参数):
# patch -Np0 < foo.patch
如果你想严格指定是还原补丁可以使用下面命令(就是增加R参数):
# patch -Rp0 < foo.patch
4.总结
单个文件
diff –uN from-file to-file >to-file.patch 制作补丁
patch –p0 < to-file.patch 打补丁
patch –RE –p0 < to-file.patch 还原
多个文件
diff –uNr from-docu to-docu >to-docu.patch
patch –p1 < to-docu.patch
patch –R –p1
二、使用git打补丁
1.检测补丁有无问题
$ git apply --check xxx.patch
2. error: xxxxx: patch does not apply
出现这种一般会是补丁冲突,这种一般是强制打上补丁(使用--reject)后根据产生的*.rej文件来手动解决冲突。
3. warning: xxxx.c has type 100644, expected 100755
出现这种警告一般是文件内没有冲突,但是文件的权限发生变动。一般没有影响。
4.强制打补丁
$ git apply --reject xxx.patch
然后再手动修改冲突,find ./ -name *.rej找到这些冲突的补丁,手动打上
5.git am同样有--reject选项,添加这个选项可以将能打上的补丁先打上,冲突的文件生成*.rej文件。
git apply xxx.patch
git apply xxx.diff
检查 patch / diff:
git apply --check xxx.patch
git apply --check xxx.diff
若git和需要打patch的文件不在一个目录:(git在framework下,patch要打入frameworks/base/下)
git apply --check --directory=base/ xxx.patch
git apply --directory=base/ xxx.patch
** git am 后面会说到,以及生产patch和打
补充:
在Yocto中编译过程中打补丁时,也可以使用这种方法,补丁中的文件路径名是可以改的,不影响补丁的成功打入。
参考:http://blog.csdn.net/maotianwang/article/details/11107083?reload
http://www.360doc.com/content/13/0323/23/8363527_273525975.shtml
Patch打补丁学习笔记的更多相关文章
- 热更新应用--热补丁Hotfix学习笔记
一.热补丁简介 热补丁主要是用于将纯C#工程在不重做的情况下通过打补丁的形式改造成具备lua热更新功能工程,主要是让原来脚本中Start函数和Update函数等函数代码块重定向到lua代码. 二.第一 ...
- diff 命令用法--如何打补丁【原创--学习笔记】
diff 命令用法 1.”-u”:表示在比较结果中输出上下文中一些相同的行,这有利于人工定位 2.“-r“:表示递归比较各个子目录下的文件 3.“-N“:将不存在的文件当作空文件 4.“-w“:忽略对 ...
- 使用diff制作补丁【学习笔记】
源文件:main.c #include <stdio.h> int main() { printf("hello"); } 修改之后的文件: main1.c #incl ...
- 《Linux内核设计与实现》课本第一章&第二章学习笔记
<Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件 ...
- 鸟哥Linux私房菜基础学习篇学习笔记3
鸟哥Linux私房菜基础学习篇学习笔记3 第十二章 正则表达式与文件格式化处理: 正则表达式(Regular Expression) 是通过一些特殊字符的排列,用以查找.删除.替换一行或多行文字字符: ...
- blfs(systemd版本)学习笔记-为桌面环境构建xorg服务
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs准备使用桌面环境,首先需要构建xorg服务 xorg服务项目地址:http://www.linuxfromscratch. ...
- blfs(systemv版本)学习笔记-为桌面环境构建xorg服务
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs准备使用桌面环境,首先需要构建xorg服务 xorg服务项目地址:http://www.linuxfromscratch. ...
- 《Linux内核设计与实现》 第一二章学习笔记
<Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆 ...
- 《Linux内核设计与实现》第一、二章学习笔记
<Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡 学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态 ...
随机推荐
- AsyncTask用法和异步加载图片
AsyncTask:是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI ...
- Android Studio使用Gradle引入包
方法一 jar包直接复制到lib中右击add as library,等自动构建完成后,打开build.gradle会发现dependencies中多了一个compile file('libs/***. ...
- windows下线程间的通信方式
1.事件: (在信息交换函数中将控件的值与控件id进行绑定,这样我们就可以更新或者获取控件的值) void CMy0722ThreadTalkingDlg::DoDataExchange(CDataE ...
- spark出现task不能序列化错误的解决方法 org.apache.spark.SparkException: Task not serializable
import org.elasticsearch.cluster.routing.Murmur3HashFunction; import org.elasticsearch.common.math.M ...
- js实现欧几里得算法
概念 在数学中,辗转相除法,又称欧几里得算法(英语:Euclidean algorithm),是求最大公约数的算法. 证明 首先假设有两个数a和b,其中a是不小于b的数,记a被b除的余数为r,那么a可 ...
- shiro学习笔记-Subject#login(token)实现过程
本博文所有的代码均为shiro官网(http://shiro.apache.org/)中shiro 1.3.2版本中的源码. 追踪Subject的login(AuthenticationToken t ...
- HashTable vs HashMap(三)
HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable. 可能你觉得HashTable很好用,为什么不用呢 ...
- Wifi Troughput Test using iperf
learning wifi throughput test using iperf [Purpose] Learning how to do wifi throughput test u ...
- ps和fireworks切图网页优化,jpg为80时
- java 继承 初始化顺序
面向对象三大特性: 封装,继承,多态 java 继承初始化顺序 先初始化父类对象, 在父类对象中先初始化父类属性,再初始化父类的构造方法,然后初始化子类对象,初始化子类对象的属性,初始化子类的构造方法 ...