Git常见分支管理策略

692 阅读3分钟

对于代码版本控制,从我们在没有工具时的傻瓜式管理,到后来的svn,再到普及git管理。git的分支管理策略,针对于不同规模的团队、不同的项目开发流程演变出多个版本,下面大体做下介绍。

几种版本控制方式

本地管理

  • 每一版本对应一个文件夹;通过复制粘贴来操作迭代及版本维护。

中心化管理

  • 多了一个中央服务器来管理版本;
  • 从中央下载版本,变更后同步到服务器;
  • 多人一起操作一个版本。

分布式管理

  • 在中央基础上多了本地仓库;
  • 本地仓库可以独立处理版本迭代;
  • 中央仓库可以实现多人协作。

git和svn对比

  • svn中心化管理,git分布式管理;
  • svn分支管理没有git灵活;
  • svn简单明了上手简单,git需要学习成本;
  • svn需要网络支持,git有本地仓库支持对网络依赖不强;

flow

以下是目前主流的分支策略。

git flow

  • 最基本的git工作流:5类分支(master、开发分支、特性分支、发布分支、修复分支),2个主分支(master、开发分支);
  • 从master分支切出开发分支、修复分支,这两个分支最终合入master分支;修复分支也会合入当前开发分支;
  • 特性分支从开发分支切出;
  • 发布分支从开发分支切出;发布分支发布后合并到master分支,打上tag。
  • 优点:该有的都有;
  • 缺点:复杂、长久分支造成冲突比较多。

github flow

  • 极简化的git工作流,2类分支(master、开发分支),1个主分支(master);
  • 从master切出开发分支;
  • 依靠github pull request来操作;
  • 有评审合并的流程;
  • 优点:不用管那么多分支;每个分支合并后都有对应版本号;
  • 缺点:针对中小型团队是可以的,稍大点的团队不能满足多分支管理。

trunkbased

  • 为解决冲突而生的git工作流,2类分支(master、发布分支),1个主分支(master);
  • 所有人在master分支上开发;
  • 分支随时满足发布,需要发布时候创建发布分支,并打上版本号;
  • 修复bug在master分支进行;
  • 优点:删繁从简,敏捷最适合,解决冲突的基本上没了;
  • 缺点:多个环境部署会碰到问题,要保证每一个提交都能正常运行。

aoneflow

  • 阿里的git工作流;3类分支(master、特性分支、发布分支),1个主分支(master);
  • 3个原则:a.从master切出特性分支;b.开发分支灵活的创建发布分支;c.上线后删除特性分支和发布分支,打tag;
  • 优点:灵活的安排发布分支,支持长时分支;
  • 缺点:有长时分支,就会有冲突。

当前实践

  • 需求:
    • 多环境;多分支;灵活发布;减少冲突;
  • 分支
    • master,主干分支,最稳定版本,所有版本切出源头。

    • 开发分支,dev1.0.0,跟随迭代版本号,开发环境公同开发版;

    • 测试分支,release1.0.0,随时可以发布分支,从dev1.0.0合并,部署测试环境和预发布环境;

    • 特性分支,不能跟随版本一起上线的,从master切出,合并到要上线当周的开发分支,要求每周自行合并master;

    • master,由管理者维护,同时管理分支创建;

    • 测试分支加保护,依靠pull request,在gitlab/github提单合并。