A方法:
在每个release中,每个人都建立自己的branch,各自的代码修改都在自己的branch中。等到release前两天,才能把代码merge到trunk里。
前提:
1. release要足够短。如果你的release是两三个月甚至更长时间才进行一次,那merge代码时产生的问题会让你焦头烂额。
2. 充分的测试代码,保证代码质量。
3. merge前,merge中(代码merge了,但还没有commit)以及merge后都要进行完整测试,以保证merge不会对trunk代码的质量产生影响。
4. 如果merge时发现conflict,需要重新进行3的后两个步骤。
优点:
1. 适用于需要经常性release的项目。
2. trunk的代码总“可用” --- 即已经经过上次release时足够的项目质量检验。
缺点:
1. merge时,往往会有较多的conflicts。
2. 为了不产生太多的conflicts,需要的协调工作较多。
3. 无法预知merge之后的代码会产生的问题。
B方法:
代码的修改基于最新的trunk代码,而且每个人都可以随时把代码commit到trunk里。
前提:
1. 要有一个经过足够质量检测的branch版本,用作production上的版本。
2. 要有足够的测试代码保证代码的质量。
3. 要有持续集成工具随时监测trunk上代码的质量,如果上次build失败,则不许再commit代码,直到build被修复。
4. story要尽量小。
优点:
1. 符合持续集成的理念。
2. trunk的代码始终是最新的,而且是“可用的”。
3. 因为commit频繁,所以产生conflict的机会较小。
缺点:
需要维护额外的release branch版本,当需要打补丁的时候,要在两处保持同步。
两种管理代码的方式,各有优劣,但B方法更符合敏捷理念,而且,本质上其实是一种对A方法的替代。
本文探讨了两种敏捷开发中的代码管理方式:一种是在每个发布周期的最后阶段将分支合并到主干;另一种是基于最新主干代码进行修改并随时提交。这两种方式各有优势和局限性,适合不同类型的项目。


被折叠的 条评论
为什么被折叠?



