Git补丁(git patch)的创建与运用

·  阅读 6723

译者: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中就像下面那样:

imdb_fix_empty_poster_01

现在可以开始创建一个补丁了!我们需要把两个最新的提交放在一个文件中,发送并使用。因为我们之前已经创建了一个分支,所以我们就不用担心提交到哪里问题了。

`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和其他人读取,他们会了解到你在代码中提交了哪些有用的内容。

imdb_signed_off

以上就是所有的内容!

分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改