前言

在我前期的项目管理的经验中,一个项目需要维护多个产品及多个版本,这给版本与分支的管理增加了难度。前期没有重视,使得分支太多太乱,版本也没记录好,引发了很多的问题。在多种分支与版本的管理模式下,最终参考阿里的AoneBased模式来管理分支。在此做个总结并分享给大家,希望可以帮助大家找到适合自己项目的版本管理方式。

背景

碰到一个较复杂的自研项目,既要做原始功能的研发,还要做产品的定制化开发。前期的版本管理大致为:

  • 1、共一个主干分支master
  • 2、N个特性分支==N个发布分支(特性分支开发完成后,直接转测,直接转为发布分支)
  • 3、不定期的更新主干分支

    产生的主要问题有
  • 1、主干分支常常跟不上线上环境的代码
  • 2、大量的合并突冲,集成测试不友好
  • 3、版本记录混乱,功能点不明确
  • 4、某功能突然要撤回时,要手动去注销对应代码

    总之产生的问题非常多,整个项目代码管理混乱,非常不利于维护。后整理思绪,先总结一些常见的版本管理模式。

    一、TrunkBased模式

    组成

    一个主干分支 + 多个发布分支

    使用流程

    每个发布分支在特定的提交点从主干分支中拉取出来,进行线上部署和Hotfix.

    缺点

    多个团队或多个产品在同一个主干分支上并行开发时,发布的时候就是灾难了。需要频繁的集成和足够的测试覆盖。

    小结

    TrunkBased这种模试应该是比较常见的。但是其多是在主干分支上开发,虽能时该保持获取到最新的代码,但是非常不利于后期的维护。使用场景过于局限,适合版本维护比较单一,迭代周期比较长的的项目。比如公司官网,功能不复杂,大多都是维护下图片或动态,可以考虑这种版本管理模式。

    二、OneFlow模式

    此模式是TrunkBased的升级版,增加了Hotfix分支,采用多主干模式,一般是双主干(一个主干分支+一个主干发布分支)。OneFlow在TrunkBased模式演进中,做了一此改善,分离了主干分支和发布分支,有效的规避了一些问题。但是同样还不能满足多版本,多产品的并行开发。

    三、GitFlow模式

    组成

    一个主干分支+一个开发分支+N个特性分支+N个发布分支+N个Hotfix分支

    使用流程

从流程图可以看出,主干分支保持了与线上环境的代码同步,但又有主发布分支隔离了未测试的不稳定代码。每次项目有新需求时,从主干分支上拉取一个最新的特性分支进行开发。开发完成时合并到发布分支上进行集成与测试,发布成功后才合到主干分支中。

小结

可以看出,GitFlow版本管理模式比较符合多版本的并行开发。所以它非常受一些很注重流程的公司青睐。但是,看似不错的模式在实现运用中也还是会出现问题。比如大量的合并冲突,集成测试不友好等。那么在如此情况下,阿里的AoneFlow模式就很好的改善了这些问题,接下来看。

四、AoneFlow模式

组成

一个主干分支+N个特性分支+N个发布分支

使用流程



从流程图可以看出,AoneFlow模式只有一个主干分支。每次有新需求时,从当前主干分支拉取一个特性分支。多个特性分支可同步开发,到发布时间节点时,根据不同的环境合并不同的分支。如测试环境发布分支,演式环境发布分支,线上环境发布分支等。成功发布后,发布分支的代码应合并到主干分支上。同样,每次合并到主干分支时要打上tag,做好记录。最后把发布分支上关联的特性分支删除。

小结

AoneFlow模式可以看出,对于维护不同环境和不同版本的情况下非常适用,也不会产生多余的分支,主干分支与线上环境保持一致。当我们碰到有某个功能要撤销时,可以直接回滚到某次合 并记录中,去除某个发布分支,合并其余分支。利于可维护。整个流程简单有规则,轻松高效管理项目版本与分支。

总结

通过以上一系列的分析梳理,我在项目中碰到的版本管理问题得到了解决。相信大家也都能找到适合项目的管理方式。无论怎样,大小版本的记录是少不了的。想要做好一个项目的管理,让项目更好的可读可维护,我们需要做好很多细节的工作。每一个环节都寻找更优的方法。版本的管理只是其中的一部分,前路漫漫,作重而道远。欢迎各位大佬多多指点!

项目版本与分支管理之阿里AoneFlow模式分析的更多相关文章

  1. 项目中git分支管理策略

  2. Atitit 版本管理----分支管理

    Atitit 版本管理----分支管理 版本管理系统"(Version Control System Branch/tag在一个功能选项中,在使用中很容易产生混淆. 分支(Branch)管理 ...

  3. 开发分支管理模型之阿里AoneFlow

    说到分支管理模型,令人最为熟悉的莫过于TrunkBased 和 GitFlow. TrunkBased 模型是持续集成思想所崇尚的工作方式,它由单个master分支和许多release分支组成,每个r ...

  4. git零基础快速入门实战,重点讲解,在实际生产中整合idea对版本、分支的管理等

    1.什么是版本管理 (多人协作)项目中常见的问题: 代码放在什么地方 ?? 同步(到服务器),代码的冲突问题 ?? 服务器访问权限问题 ?? (代码)服务器内容修改的细节 ?? 项目版本的发布 ?? ...

  5. git项目分支管理

    分支管理 创建项目时,会针对不同环境创建两个常设分支(也可以算主分支,永久不会删除): master :生产环境的稳定分支,生产环境基于该分支构建.仅用来发布新版本,除了从 release 测试分支或 ...

  6. git的介绍、git的功能特性、git工作流程、git 过滤文件、git多分支管理、远程仓库、把路飞项目传到远程仓库(非空的)、ssh链接远程仓库,协同开发

    Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. [1] 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码 ...

  7. 【转】SVN管理多个项目版本库

    转载地址:http://blog.163.com/zhangxuemin_zy/blog/static/10178565520115704031799/ SVN管理多个项目版本库:   安装SVN服务 ...

  8. 怎么使用git来管理项目版本?

    怎么使用git来管理项目版本和存放代码? 作者:rongfangliu 转载请注明出处:http://www.cnblogs.com/rongfangliu/p/howuseGit.html 工具: ...

  9. 使用 Xcode 和 Android Studio 管理 iOS 和 Android 项目版本

    在移动应用开发和运营的过程中,版本管理是一个老生常谈的基础问题,一些版本的基本概念也常常会困扰我们的研发和运营人员.同时,手动管理软件版本,也常常会因为不小心导致后续的发布和更新问题. 这里,我准备了 ...

随机推荐

  1. 前端的UI设计与交互之字体篇

    跨平台的字体设定,力求在各个操作系统下都有最佳展示效果.字体是界面设计中最重要的基本构成之一,用户通过文本来消化内容和完成工作,优雅的字体将大大提升用户的阅读体验及工作效率.在满足不同终端始终保持良好 ...

  2. 1833 深坑 TLE 求解

    题目描述: 大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 ...

  3. mysql数据库索引优化与实践(一)

    前言 mysql数据库是现在应用最广泛的数据库系统.与数据库打交道是每个Java程序员日常工作之一,索引优化是必备的技能之一. 为什么要了解索引 真实案例 案例一:大学有段时间学习爬虫,爬取了知乎30 ...

  4. Bootstrap3 datetimepicker控件的使用

    Bootstrap3 日期+时间选择控件 1.支持日期选择,格式设定 2.支持时间选择 3.支持时间段选择控制 4.支持中文 官网地址:http://eonasdan.github.io/bootst ...

  5. 【Python】 零碎知识积累 II

    [Python] 零碎知识积累 II ■ 函数的参数默认值在函数定义时确定并保存在内存中,调用函数时不会在内存中新开辟一块空间然后用参数默认值重新赋值,而是单纯地引用这个参数原来的地址.这就带来了一个 ...

  6. 大数据 --> Hadoop集群搭建

    Hadoop集群搭建 1.修改/etc/hosts文件 在每台linux机器上,sudo vim /etc/hosts 编写hosts文件.将主机名和ip地址的映射填写进去.编辑完后,结果如下: 2. ...

  7. 把文件每隔三行合并成一行(awk之RS、ORS与FS、OFS)

    比如文本如下:123abc合并后的结果是:1 2 3a b c #.txt a b c awk之RS.ORS与FS.OFS 转自http://www.cnblogs.com/fhefh/archive ...

  8. cookie session的共同点和区别

    由于HTTP协议是无状态的,在WEB系统中,怎么识别请求来自于哪里呢?是哪一个用户发起的请求呢? 为了解决这一个问题, HTTP协议引入了cookie和session这两个概念 cookie是服务器传 ...

  9. node.js应用脚手架:koa2、sequelize、mysql

    自制了一个 nodejs 应用的脚手架. 基于 koa2 的,所以需要保证 node 环境至少为 7.6.0 吸取了以前的踩坑教训,添加了守护进程,确保应用不会因为异常导致网站直接挂掉(使用了 for ...

  10. Git简单图文教程

    环境: Windows [版本 10.0.15063]64位 Git-2.14.1 64位[下载] TortoiseGit-2.5.0.0 64位[下载],这是一个Git 客户端,外号"乌龟 ...