译者:ginny宁嫣
26 October, 2009
怎样创建和运用git patch
使用Git创建一个补丁文件(git patch)是很容易的,你需要知道它是分几次做完的。
本文将阐述怎样为你的仓库最近提交的文件创建一个补丁,也会介绍可以怎样在其他仓库中运用这个补丁。
准备工作
你可以遵循一些常用的git实践以便更容易地创建补丁。这些不是一定要做的事情,但是能让你的生活更简单。
如果你需要修复了一个bug或者需要创建新的内容,请在分支中进行操作。
如果你想为我的imdb创建一个补丁,首先你需要克隆我的仓库,然后为你将要提交的内容新建一个分支。在这个例子中,我们要为empty poster这个项目做一个虚拟的bug修复工作。
git clone git://github.com/ariejan/imdb.git
cd imdb
git checkout -b fix_empty_poster
复制代码
现在在新的 fix_empty_poster
分支中你可以写测试,更新代码或者做任何你想要修复的工作。
如果你对你的修改满意的话,你就可以提交你的补丁了。例子仅供参考:我假定你已经在fix_empty_poster
分支上做了一些工作,但是还没有被合并到主支上。
创建patch
好了,现在我已经做了一些工作,看一些fix_empty_poster
分支的git log
文件:
git log --pretty=oneline -3
* ce30d1f - (fix_empty_poster) Added poster URL as part of cli output (7 minutes ago)
* 5998b80 - Added specs to test empty poster URL behaviour (12 minutes ago)
* aecb8cb - (REL-0.5.0, origin/master, origin/HEAD, master) Prepare release 0.5.0 (4 months ago)
复制代码
在GitX中就像下面那样:
现在可以开始创建一个补丁了!我们需要把两个最新的提交放在一个文件中,发送并使用。因为我们之前已经创建了一个分支,所以我们就不用担心提交到哪里问题了。
`git format-patch master --stdout > fix_empty_poster.patch`
复制代码
上面的方式将创建一个名为fix_empty_poster.patch
的新文件,新文件里面有当前分支(fix_empty_poster
)的所有的修改,主支中没有这些修改。一般情况下,git会为每一个提交创建一个独立的分支,这不是我们需要的,我们需要的是一个独立的补丁文件。
现在你已经为你所做的修复工作生成了一个补丁,你需要把补丁发送给维护项目的人。
应用补丁
谁会应用你刚刚发送的补丁呢?
首先,你可以简单地使用git apply
查看补丁中的变化。
`git apply --stat fix_empty_poster.patch`
复制代码
需要注意的是这条命令并没有运用补丁,只是告诉你这个补丁会做什么。在用你最喜欢的编辑器查看之后,你会看到到底做了哪些实际上的改变。
查看之后你突然对使用这个补丁之后会发生什么产生了兴趣。Git允许你在真正运用之前对补丁进行测试。
`git apply --check fix_empty_poster.patch`
复制代码
如果没有发生任何错误,这个补丁就可以使用了。当然,你也可能看见运用补丁之后发生了很多问题。我使用git am
而不是git apply
,因为git am
允许你停止使用已经运用的补丁,可供以后参考。
git am --signoff < fix_empty_poster.patch
Applying: Added specs to test empty poster URL behaviour
Applying: Added poster URL as part of cli output
复制代码
好了,补丁已经可以使用了,你的主支也已经更新了。当然你可以再次进行测试来确保没有问题发生。
在你的git日志中,你会发现提交信息中包含了一个“Signed-off-by”的标记,这个标记会被 Github和其他人读取,他们会了解到你在代码中提交了哪些有用的内容。
以上就是所有的内容!