Git打补丁常见问题
Git打补丁常见问题
往往觉得得到某个功能的补丁就觉得这个功能我就已经成功拥有了,可是在最后一步的打补丁的工作也是须要相当慎重的,甚至有可能还要比你获取这个补丁花费的时间还要多。看到好多同行遇到这个问题,且近期自己也花费近20天「获取,打,验证」一个特性功能的补丁。趁热总结一下,知识点可能不多,可是问题是相当棘手的。
$ git apply -h
usage: git apply [options] [<patch>...]
--exclude <path> don't apply changes matching the given path
--include <path> apply changes matching the given path
-p <num> remove <num> leading slashes from traditional diff paths
--no-add ignore additions made by the patch
--stat instead of applying the patch, output diffstat for the input
--numstat show number of added and deleted lines in decimal notation
--summary instead of applying the patch, output a summary for the input
--check instead of applying the patch, see if the patch is applicable
--index make sure the patch is applicable to the current index
--cached apply a patch without touching the working tree
--apply also apply the patch (use with --stat/--summary/--check)
-3, --3way attempt three-way merge if a patch does not apply
--build-fake-ancestor <file>
build a temporary index based on embedded index information
-z paths are separated with NUL character
-C <n> ensure at least <n> lines of context match
--whitespace <action>
detect new or modified lines that have whitespace errors
--ignore-space-change
ignore changes in whitespace when finding context
--ignore-whitespace ignore changes in whitespace when finding context
-R, --reverse apply the patch in reverse
--unidiff-zero don't expect at least one line of context
--reject leave the rejected hunks in corresponding *.rej files
--allow-overlap allow overlapping hunks
-v, --verbose be verbose
--inaccurate-eof tolerate incorrectly detected missing new-line at the end of file
--recount do not trust the line counts in the hunk headers
--directory <root> prepend <root> to all filenames
$
第一步检測补丁有无问题
$ git apply --check xxx.patch
能检測出现的问题有下面几种样例:
1. error: cannot apply binary patch to 'xxx' without full index line
xxx通常会是bin/png/gif等等二进制文件 详细的原因就是patch中有指明要打上xxx文件,可是这个文件并不包括在这个patch中,不过有一个名字存在当中。遇到这个问题要重视。
2. error: core/java/android/provider/Settings.java: patch does not apply
出现这样的通常会是补丁冲突,这样的通常是强制打上补丁(使用--reject)后依据产生的*.rej文件来手动解决冲突。
3. warning: core/java/android/view/View.java has type 100644, expected 100755
出现这样的警告通常是文件内没有冲突,可是文件的权限发生变动。一般没有影响。
第二步强制打补丁
$ git apply --reject xxx.patch
运行了这一步后会产生什么样的结果,我对第一步的冲突来相应说明。
1.这样的问题通常是制作补丁的开发者没有将二进制文件制作到patch中云,对于这样的情况不会有不论什么的提示,由于patch中源资源文件都没有,Git也没有什么招术来解决。最好的方法是联系补丁提供者。
2.这样的情况是因为git apply是对照补丁中前后几行代码,假设没有出如今目标文件里,那么这就是冲突。这个是比較常常出现的,对于这样的情况会生成*.rej文件,能够find ./ -name *.rej找到这些冲突的补丁,手动打上就好。
3.能够考虑忽略。
眼下就这些,遇到新的问题再补充。
git am -3 -k后假设有冲突,不要运行git checkout。假设不愿意改动冲突文件,佯装改动一下,加入进去才干进行下一步。
git --git-dir=../other_proj_dir/.git format-patch -k -1 --stdout xxxxxxxxxxxxxxxxxx | git am -3 -k
git am相同有--reject选项,加入这个选项能够将能打上的补丁先打上,冲突的文件生成*.rej文件。
Git打补丁常见问题的更多相关文章
- Git 打补丁流程
A. 使用git制作补丁时, 需要创建一个新的分支, 修改之后再提交只需要修改需要修改的文件, 并使用git -format-patch -M master 将当前的分支与主分支(master)进行比 ...
- Git 使用心得 & 常见问题整理
开源Linux 回复"读书",挑选书籍资料~ Git 流程图 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remot ...
- git 的补丁使用方法
1.生成补丁 format-patch可以基于分支进行打包,也可以基于上几次更新内容打包. 基于上几次内容打包 git format-patch HEAD^ 有几个^就会打几个patch,从最近一次 ...
- GIT使用—补丁与钩子
一.补丁 生成补丁 [root@localhost buding]# echo B > file;git add file;git commit -m "B" [master ...
- Git 应用补丁报错 “sha1 information is lacking or useless”
因为现场代码在客户局域网内,不能连接到公司网络,所以一般更新的时候都是打补丁, 然后在客户现场应用补丁,但是最近在应用补丁的时候出现了如下问题: ... fatal: sha1 information ...
- git打补丁、还原补丁
打补丁.还原补丁 1.两个commit间的修改(包含两个commit,<r1>.<r2>表示两个提交的版本号,<r1>是最近提交) git format-patch ...
- GIT打补丁 - patch和diff应用
一. 准备工作: [root@guangzhou gittest]# git br * master [root@guangzhou gittest]# git chk -b patch-test1 ...
- git操作之常见问题解决方案
一.版本不一致 1. 错误信息: > git push -u origin master To ******.git ! [rejected] master -> master (non- ...
- git 安装及常见问题处理
卸载掉自带的: yum remove git 安装: yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-de ...
随机推荐
- 对于stackoverflow的中文翻译的相关问题
我们非常多朋友都给我留言说.希望我翻译一下stackoverflow的问题以及答案,首先我也非常愿意为大家翻译,在能够帮助大家的同一时候,对我本人的技能的提升有优点:可是工作量实在太大,所以我不可能翻 ...
- java特权制度设计篇
数据库表设计 1.1.1. 模块管理(jk_module) 项 类型 说明 id long 就是数据库记录idx号 name string 模块名称 orderid int 排序id 由小到大显 ...
- 实现ios常见菜单效果的思路
眼下见过的实现边側菜单的效果.比較流行的有下面三种:(效果图) 1.菜单条覆盖在部分主视图上 附上实现该效果的一个不错的源代码地址: http://code4app.com/ios/RNFrosted ...
- hdu5124(树状数组+离散化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5124 题意:有n条线段,求被覆盖到次数最多的点的次数 分析: 1.可以转化成求前缀和最大的问题:将区间 ...
- AC自动机---个人总结
比较好的 AC自动机算法详解.. [转]http://www.cppblog.com/mythit/archive/2009/04/21/80633.html 个人总结:[图是盗用的..] ac自动机 ...
- sort功能使用
头: #include <algorithm> using namespace std; 1.默认的sort函数是按升序排序. sort(a,a+n); / ...
- 下拉刷新,上拉装载许多其他ListView
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanVuaHVhaG91c2U=/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- Learning Cocos2d-x for WP8(9)——Sprite到哪,我做主
原文:Learning Cocos2d-x for WP8(9)--Sprite到哪,我做主 工程文件TouchesTest.h和TouchesTest.cpp 相关素材文件 事件驱动同样适用于coc ...
- POJ3190 Stall Reservations 【贪婪】
Stall Reservations Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3106 Accepted: 111 ...
- ECSHOP分类页面筛选功能(按分类下子分类和品牌筛选)
其实分类页面里面本来就有相关的品牌.属性.分类的筛选功能在category.php和模板加上相应的功能即可 1.读出当前分类的所有下级分类 $chlidren_category = $GLOBALS[ ...