那我应该向何处检入我认为已经完成、但是在检入主干前需要进行验证的代码呢?当然,我可以在本机上完成测试,并直接将通过测试的代码检入到主干之中。但这还是有点吓人,我相信大家都遇到过“嘿,但是它在我的机器上运行没有问题啊”这样的事情。

另外一个问题是“好吧,我完成了的编码任务,现在要回家了。我该把代码检入到哪里?还没有测试过呢,所以不能检入到主干中。我想把它检入到别的地方,这样其他的团队成员可以在其基础之上继续工作了”(敏捷团队是采取代码集体所有制的,对吧?)。

你看,我们有希望检入的内容,但是不存在不违反分支方针可以进行检入的地方。这是建立新分支的一个合理原因了。

我们可将此称为工作分支,团队所有成员都可共享该分支。有人称其为开发分支。

团队A的工作分支方针:

代码完成编译和构建,并通过所有的单元测试。


很好,现在我们有两个分支了。一个稳定的分支(主干)和一个稍微不那么稳定的分支(团队分支)。团队分支是红色的,表示它不太稳定;例如:这个分支通过了单元测试,但是它可能还没有完成集成测试,所以还没有稳定到可以发布的状态。好,现在团队有地方可以检入正在进行中的工作了!

嗯,那要是需要同步不同的分支时应该怎么做呢?往下看。

从工作分支公开发布(publish)至主干
终(我们希望)一个故事可以进入到“完成”状态。或者更明确地说,终工作分支会达到可发布状态。此时我们可以(而且应该)将此分支公开发布到主干上,比如将工作分支上所有的新代码复制到主干上。完成后,主干与工作分支完全相同了。

我们可以称此过程为“公开发布”,因为我们已经完成了一些工作,而且现在已经准备好将其“公开发布”回主干供发布用。这样说只是一个有用的隐喻。

下面是一个示例。假设我们已经实现了两个故事:“开户(Register)”和“存款(Deposit)”。它们都是“已完成”的,也是说通过了单元测试、集成测试,并且处于“可发布”状态。我们已经开始处理“取款(Withdraw)”这个故事,但是它还没有“完成”。任务板看起来会像下面这张图示一样:

每个黄色的即时贴表示一项任务,也是要完成故事需要做的一项工作。例如编辑类X,更新构建脚本,等等。每项任务通常包含一个人日的工作,每个故事通常包含3至8个人日的工作。

分支的过程会像下面这样:

我们的第一个团队实现了“开户”故事,并将代码检入到工作分支中,运行集成测试,修正一些问题,再次检入,再次运行测试,通过了!“开户”故事“完成”了!然后将其公开发布到主干之中。

接下来实现“存款”。只需要执行一次检入可以了。集成测试通过,我们再次把代码发布到主干之中。

现在团队正在实现“取款”故事。他们已经完成两次检入了,但是这个故事仍然没有完成。

注意“发布到主干”并不是说我们仅把某个故事的代码直接拷贝到主干中,而是意味着所有的工作拷贝到主干中,做一次完整的同步。