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 ...
随机推荐
- 我经历的IT公司面试及离职感受(转)
毕业后几年一直待在广州,觉得这是一个比较生活化及务实的城市,其互联网公司和相应的投融资环境都不如北深上活跃,大大小小的面试也有几十个,有点规模的公司应该都面试过了,面试一般会见到主力技术人员,技术主管 ...
- hdu4059 The Boss on Mars
The Boss on Mars Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- Hasor:生命周期
首先引用Wiki的介绍一下Hasor: “Hasor是一款开源框架.它是为了解决企业模块化开发中复杂性而创建的.Hasor遵循简单的依赖.单一职责,在开发多模块企业项目中更加有调理.然而Has ...
- 初尝Java序列化/反序列化对象
看个类: package com.wjy.bytes; import java.io.Serializable; public class ObjTest implements Serializabl ...
- I2C分析三
1 引言 IIC (Inter-Integrated Circuit1总线是一种由Philips公司开发的2线式串行总线,用于连接微控制器及其外围设备.它是同步通信的一种特殊形式,具有接口线少.控制方 ...
- 《数字图像处理原理与实践(MATLAB版)》一书之代码Part2
本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part2(P43~80),代码运行结果请參见原书配图,建议下载代码前阅读下文: 关于<数字图像处理原理与实践(MA ...
- NOJ1184 失落的邮票 哈希表
意甲冠军 我们共收集N邮票.现在失去了2张,剩下N-2张-..原集邮收集了所有对.因此,找到什么两枚邮票是一个.它们输出. (确定缺少邮票是不一样的) 思路 由于编号比較大,能够用hash表压缩成数组 ...
- 服务器编程入门(3)TCP协议详解
问题聚焦: 本节从如下四个方面讨论TCP协议: TCP头部信息:指定通信的源端端口号.目的端端口号.管理TCP连接,控制两个方向的数据流 TCP状态转移过程:TCP连接的任意一 ...
- WCF之添加自定义用户名密码认证
1.创建WCF服务应用以及调用客户端(请自行google). 2.创建X509证书 cmd 进入 C:\Program Files\Microsoft SDKs\Windows\v6. ...
- Ubuntu 12.04 安装 Tomcat8 遇到的问题
问题: :/tomcat8/bin$ sudo ./configtest.sh Using CATALINA_BASE: /home/yyb/android/tomcat8 Using CATAL ...