背景:

为了更好的支持产品研发过程,我们需要设计符合公司研发的分支策略。
无论多复杂或者简单的策略都可以归类为以下两种:

1.主干开发,分支发布
2.分支开发,主干发布

PS:我们约定:

主干(master/git trunk/svn)
分支(branch)
标签(tag)
如果从版本控制工具实现上来看:
svn: trunk、branch、tag 没有差别
git: master、branch、轻量级tag 没有差别
为了更好的区分和管理,人为的从逻辑上进行区分
tag的作用:里程碑记录,方便回溯(发布回滚等)

主干开发,分支发布:

logo

  • 优点:
    1. 较少的分支存在,大家专注在主干开发
  • 适用于:
    1. 敏捷开发模式,每个迭代都很快
    2. 维护型项目,较少需求变更,基本没有并行开发的需要
    3. 个人项目
  • 常用方式:
    1. 所有dev在主干上面进行开发
    2. 需要发布的时候从指定版本拉出发布分支,进行测试
      • 如果成功:那么打出tag,进行发布
      • 如果不成功:那么继续在发布分支上面进行修改,然后测试;
        测试成功后,打tag,合并发布分支修改到主干;

分支开发,主干发布:

logo

  • 优点:
    1. 对并行开发支持很好
  • 适用于:
    1. 并行开发很频繁的项目
  • 常用方式:
    1. 根据项目发布排期拉出并行开发分支
    2. 不同or相同的dev分别在分支上面进行开发
    3. 测试通过后,打tag进行发布,合并分支修改到主干
    4. 后发布的分支需要合并最新的主干代码
  • 注意点:
    1. 所有分支都从主干拉出;
    2. 发布时候要检查 tag是否包含最新的主干代码;
    3. 后发布的分支在合并最新主干代码后,注意测试范围扩大(除了测试本分支功能外,合并过来的功能也需要覆盖到!!!)

PS:

本文只是简单介绍下基础的分支策略,各位需根据自身团队、业务来综合定制适合的分支策略。