Git Patch使用: 生成,导入,解决冲突
来源:互联网 发布:2017大数据就业前景 编辑:程序博客网 时间:2024/05/17 06:06
1. Git Patch
git patch包括2中: 标准diff 和git format-patch
2. 生成patch
2.1 git diff
生成标准patch最简单, 但是很多信息没有
git diff > my.diff
2.2 git format-patch
生成git专用patchgit format-patch -M master
format-patch中包涵diff, git commit, time等等
From c0b96dc1b770c45c49bd2945fe6fade8549f23b9 Mon Sep 17 00:00:00 2001From: XXX <XXX@gmail.com>Date: Wed, 20 May 2015 11:07:59 +0800Subject: [PATCH] 134-Video: Suport XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxTicket:Bug-6850Change-Id: I9984b500b06d60d92b9392fdb3b74ff7cca9857bSigned-off-by: XXX <XXX@gmail.com>--- AndroidManifest.xml | 4 +-- src/com/android/videoplayer/MainActivity.java | 35 ++++++++++++++++++------- 2 files changed, 27 insertions(+), 12 deletions(-)diff --git a/AndroidManifest.xml b/AndroidManifest.xmlindex bc0383e..f893901 100755--- a/AndroidManifest.xml+++ b/AndroidManifest.xml@@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.videoplayer"- android:versionCode="089"- android:versionName="0.8.9">+ android:versionCode="090"+ android:versionName="0.9.0"
2.3 两种patch的比较:
兼容性:很明显,git diff生成的Patch兼容性强。如果你在修改的代码的官方版本库不是Git管理的版本库,那么你必须使用git diff生成的patch才能让你的代码被项目的维护人接受。除错功能:对于git diff生成的patch,你可以用git apply --check 查看补丁是否能够干净顺利地应用到当前分支中;如果git format-patch 生成的补丁不能打到当前分支,git am会给出提示,并协助你完成打补丁工作,你也可以使用git am -3进行三方合并,详细的做法可以参考git手册或者《Progit》。从这一点上看,两者除错功能都很强。
版本库信息:由于git format-patch生成的补丁中含有这个补丁开发者的名字,因此在应用补丁时,这个名字会被记录进版本库,显然,这样做是恰当的。因此,目前使用Git的开源社区往往建议大家使用format-patch生成补丁。
3. 导入patch
3.1 diff
git apply my.diff
3.2 format-patch
git am 001Fix.patch
4. 冲突解决
4.1 Error Info
git am xxx.patchorgit apply xxx.diff
如果该补丁有冲突/问题, 将不会合并到代码中, 如下例:
reconsuction_05.20.diff:1787: trailing whitespace.reconsuction_05.20.diff:1788: trailing whitespace.error: 打补丁失败:xxxxx.java:455error: x x x.java:补丁未应用
4.2 问题分析
(1) 包含二进制文件
git apply提示错误,无法应用补丁。是因为普通的diff格式文件是不支持二进制文件的,新增的或者发生变化的二进制文件无法在diff文件中体现。git扩展了diff使其支持二进制格式,生成补丁时指定选项--binary即可,生成的文件可以顺利的git apply。
git diff HEAD^..HEAD --binary > foobar.patch
(2)空白问题
git apply应用补丁时会检测空白错误,默认情况下,尾部空白,包含空白的空行,初始tab缩进之后紧跟的空白字符会被认为是错误。
处理这个错误的行为由命令行参数--whitespace或者core.whitespace配置来控制,共有5种可能的动作:
- nowarn: 关闭错误提示
- warn: 输出部分错误提示,但完整的应用补丁,不会处理错误,这是默认动作。
- fix: 输出部分错误,修正错误后应用补丁
- error:输出部分错误,拒绝应用补丁。
- error-all:输出全部的错误,拒绝应用补丁。
(3) 冲突问题
4.3 解决冲突
(1) reject
git apply PATCH --reject
输出冲突信息如下
error: 当查询: mWindow.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
error: 打补丁失败:xxxxx.java:455块 #9 成功应用于 470(偏移 4 行)块 #10 成功应用于 526(偏移 4 行)块 #11 成功应用于 550(偏移 4 行)error: 当查询: } default: VideoLogger.e(TAG, "Unrecognized type: " + mType); } }error: 打补丁失败:src/com/android/videoplayer/PlayerActivity.java:571
(2)手动解决冲突
通常出现冲突时会生成一个***.rej, 根据此文件中信息, 手动解决冲突
(3) 合并冲突
git add --all
(4) 最后一步
git am --abord
0 0
- Git Patch使用: 生成,导入,解决冲突
- git apply patch解决冲突
- Git am PATCH冲突解决
- 使用 git 生成patch和使用patch
- git 生成patch和使用patch
- 使用Git生成patch和应用patch
- 使用Git生成patch和应用patch
- git 生成patch和使用patch
- git 生成patch和使用patch
- 如何使用git 生成patch
- 使用 Git 生成标准 Patch
- git patch生成和使用
- 如何使用git 生成patch
- 如何使用git 生成patch
- 如何使用git 生成patch
- 如何使用git 生成patch 和打入patch
- 如何使用git 生成patch 和打入patch
- eclipse使用git解决冲突
- 几种常见数据库的driverClassName和url
- 欢迎使用CSDN-markdown编辑器
- linux的nohup命令的用法
- 计算机网络复习——传输层
- 修改hive表location
- Git Patch使用: 生成,导入,解决冲突
- java中常用的设计模式-装饰设计模式
- web根据地址定位
- jQuery的碎碎念
- Mysql的存储引擎的类型,MyISAM&InnoDB等
- python程序语言的安装
- Oracle游标(一)
- VS2010 编译错误 RC1106: invalid option -ologo
- iOS - apple官方ARC文档关键点摘录