Skip to content
This repository has been archived by the owner on May 2, 2019. It is now read-only.

Commit

Permalink
fixed some bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
chunzi committed Jun 23, 2011
1 parent abddf2a commit f28bf4d
Showing 1 changed file with 6 additions and 10 deletions.
16 changes: 6 additions & 10 deletions zh/05-distributed-git/01-chapter5.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,6 @@ Insert 18333fig0515.png

现在,A、B 两个特性分支各不相扰,如同竹筒里的两颗豆子,队列中的两个补丁,你随时都可以分别从头写过,或者衍合,或者修改,而不用担心特性代码的交叉混杂。如图 5-16 所示:


Insert 18333fig0516.png
图 5-16. featureB 以后的提交历史

Expand Down Expand Up @@ -568,11 +567,11 @@ Insert 18333fig0518.png

如果想要集成新的代码进来,最好局限在特性分支上做。临时的特性分支可以让你随意尝试,进退自如。比如碰上无法正常工作的补丁,可以先搁在那边,直到有时间仔细核查修复为止。创建的分支可以用相关的主题关键字命名,比如 `ruby_client` 或者其它类似的描述性词语,以帮助将来回忆。Git 项目本身还时常把分支名称分置于不同命名空间下,比如 `sc/ruby_client` 就说明这是 `sc` 这个人贡献的。现在从当前主干分支为基础,新建临时分支:

$ git branch sc/ruby_client master
$ git branch sc/ruby_client master

另外,如果你希望立即转到分支上去工作,可以用 `checkout -b`

$ git checkout -b sc/ruby_client master
$ git checkout -b sc/ruby_client master

好了,现在已经准备妥当,可以试着将别人贡献的代码合并进来了。之后评估一下有没有问题,最后再决定是不是真的要并入主干。

Expand Down Expand Up @@ -767,9 +766,7 @@ Insert 18333fig0522.png
Insert 18333fig0523.png
图 5-23. 特性分支发布后

这样,在人们克隆仓库时就有两种选择:既可检出最新稳定版本,确保正常使用;也能检出开发版本,试用最前沿的新特性。

你也可以扩展这个概念,先将所有新代码合并到临时特性分支,等到该分支稳定下来并通过测试后,再并入 `develop` 分支。然后,让时间检验一切,如果这些代码确实可以正常工作相当长一段时间,那就有理由相信它已经足够稳定,可以放心并入主干分支发布。
这样,在人们克隆仓库时就有两种选择:既可检出最新稳定版本,确保正常使用;也能检出开发版本,试用最前沿的新特性。你也可以扩展这个概念,先将所有新代码合并到临时特性分支,等到该分支稳定下来并通过测试后,再并入 `develop` 分支。然后,让时间检验一切,如果这些代码确实可以正常工作相当长一段时间,那就有理由相信它已经足够稳定,可以放心并入主干分支发布。

#### 大项目的合并流程 ####

Expand All @@ -789,10 +786,10 @@ Insert 18333fig0525.png

一些维护者更喜欢衍合或者挑拣贡献者的代码,而不是简单的合并,因为这样能够保持线性的提交历史。如果你完成了一个特性的开发,并决定将它引入到主干代码中,你可以转到那个特性分支然后执行衍合命令,好在你的主干分支上(也可能是`develop`分支之类的)重新提交这些修改。如果这些代码工作得很好,你就可以快进`master`分支,得到一个线性的提交历史。

另一个引入代码的方法是挑拣。挑拣类似于针对某次特定提交的衍合。它首先提取某次提交的补丁,然后试着应用在当前分支上。如果某个特性分支上有多个commits,但你只想引入其中之一就可以使用这种方法。也可能仅仅是因为你喜欢用挑拣,讨厌衍合。假设你有一个类似图 5-26的工程
另一个引入代码的方法是挑拣。挑拣类似于针对某次特定提交的衍合。它首先提取某次提交的补丁,然后试着应用在当前分支上。如果某个特性分支上有多个commits,但你只想引入其中之一就可以使用这种方法。也可能仅仅是因为你喜欢用挑拣,讨厌衍合。假设你有一个类似图 5-26 的工程

Insert 18333fig0526.png
Figure 5-26. 挑拣(cherry-pick)之前的历史
5-26. 挑拣(cherry-pick)之前的历史

如果你希望拉取`e43a6`到你的主干分支,可以这样:

Expand All @@ -804,7 +801,7 @@ Figure 5-26. 挑拣(cherry-pick)之前的历史
这将会引入`e43a6`的代码,但是会得到不同的SHA-1值,因为应用日期不同。现在你的历史看起来像图 5-27.

Insert 18333fig0527.png
Figure 5-27. 挑拣(cherry-pick)之后的历史
5-27. 挑拣(cherry-pick)之后的历史

现在,你可以删除这个特性分支并丢弃你不想引入的那些commit。

Expand Down Expand Up @@ -887,7 +884,6 @@ Figure 5-27. 挑拣(cherry-pick)之后的历史

这就是自从v1.0.1版本以来的所有提交的简介,内容按照作者分组,以便你能快速的发e-mail给他们。


## 小结 ##

你学会了如何使用Git为项目做贡献,也学会了如何使用Git维护你的项目。恭喜!你已经成为一名高效的开发者。在下一章你将学到更强大的工具来处理更加复杂的问题,之后你会变成一位Git大师。

0 comments on commit f28bf4d

Please sign in to comment.