分类: LINUX
2012-10-21 22:09:58
这篇文章主要介绍一下git-am 和 format-patch 的使用。 因为在git使用当中,
会有很多时候别人(供应商或者其他的开发人员)发过来一系列的patch,这些patch通常的是类似这样的名字:
里面包含了提交的日志,作者,日期等信息。你想做的是把这些patch引入到你的
代码库中,最好是也可以把日志也引入进来, 方便以后维护用。传统的打patch方式是
这样来打patch,但是这样会把这些有用的信息丢失。
由于这些patch显然是用git format-patch来生成的,所以用git的工具应该就可以很好的做好。
git-am 就是作这件事情。
在使用git-am之前, 你要首先git am –abort 一次,来放弃掉以前的am信息,这样才可以进行一次全新的am。
不然会遇到这样的错误。
.git/rebase-apply still exists but mbox given.
git-am 可以一次合并一个文件,或者一个目录下所有的patch,或者你的邮箱目录下的patch.
下面举两个例子:
如果成功patch上去, 你就可以去喝杯茶了。
如果失败了, git 会提示错误, 比如:
error: patch failed: android/mediascanner.cpp:452这样你就需要先看看patch, 然后改改错误的这个文件,让这个patch能够patch上去。
(这里git就会按照文件名的顺序一次am这些patch)
如果一切顺利, 你所有的patch都OK了, 你又Lucky了。
不过不顺利的时候十有八九,如果git am中间遇到了patch,am就会停到打这个
patch的地方, 告诉你是哪个patch打不上去。
比如我现在有一个文件file,有两个patch.file 的内容是
the text两个patch分别是:
0001-add-line.patch:
From 48869ccbced494e05738090afa5a54f2a261df0f Mon Sep 17 00:00:00 2001 From: zhangjiejing0002-change-line.patch:
From f756e1b3a87c216b7e0afea9d15badd033171578 Mon Sep 17 00:00:00 2001 From: zhangjiejing运行
git am *.patch
来merge这些patch, 报错, Patch failed at 0001 add line这样我们看0001这
个patch,原来patch需要的是some text, 而file里面是the text, 所以我们用编
辑器把这行改成some text,
在解决完冲突以后, 比如用git add来让git知道你已经解决完冲突了。
git format-patch经验
A
git log
commit c
commit b
commit a
commit init
B
git log
commit init
=============
A,B两人代码共有commit init
现在A改动到a=>b=>c
B想用补丁来升级
A:
git format-patch init..c ==>产生三个补丁
001-commit-a.patch 对应从commit init出发升到a
002-commit-b.patch 对应从commit a出发升到b
003-commit-c.patch 对应从commit b出发升到c
即git format-patch x..y
是从共有的x出发一路一个一个升到y
(x,y]
=================
B
git am *.patch git会自动按文件名一级级升上去的
转:http://blog.csdn.net/fyh2003/article/details/7599264