本文分支策略为总结各中小型企业常见做法(仅代表个人观点),在下才疏学浅,文章如有缺漏或不当之处,望各位帮忙指正。写此文也十分希望能起抛砖引玉之效。

据我所知,目前大部分无论是按瀑布/敏捷开发模型,就算服务器资源十分有限的情况下,一套相对标准的研发流程也都应该至少具有开发(DEV)/测试(TEST)/生产(PROD)三个环境。

环境说明

  • 开发环境(DEV): 此服务环境(集群)一般为开发人员进行代码开发,单元自测,以及实验的稳定环境。
  • 测试环境(TEST): 开发人员提交测试后,将相关代码,服务环境部署到此环境,由测试人员对此环境的服务进行专业性的二次测试,例如基准测试,安全测试,业务逻辑验证等等。
  • 生产环境(PROD): 当测试环境得到充分的验证之后并满足发布生产条件,会将相关代码,服务环境部署到此环境,提供正式服务。

分支说明

  • feature(-xx): 功能分支,每个功能分支应该代表着每个固定的迭代或开发功能集版本。
  • dev: 开发分支(保护分支),每次推送(Push) 代码到此分支时,会触发固定流水线(pipeline),部署应用到开发环境。
  • test: 测试分支(保护分支),每次推送(Push) 代码到此分支时,会触发固定流水线(pipeline),部署应用到测试环境。
  • main(master): 主分支(保护分支),不允许直接进行推送(Push)操作,需要合并应当发起Pull Request(PR),由负责生产环境的同事对此PR进行合并,此分支代码对应生产环境。
  • hotfix: 紧急修复分支,俗称救火分支,当生产环境发生问题需要紧急修改代码时,由开发人员从main分支创建出来的新分支,在此分支上紧急修改代码后,合并到测试环境,测试验证通过后,直接发起Pull Request(PR)提交到main;此分支一般在紧急修复线上问题之后,可将其合并(merge)到dev,再将此分支删除。

单一功能迭代型分支策略

适用场景: 统一开发迭代版本,统一提测流程,统一上线流程

不适用场景: 多功能并行开发,多功能分别提测

适用人数:3-5人

流程图说明

  • 开发 : 所有开发人员均在统一迭代分支(feature)上开发(包括修复bug),在功能分支开发自测,单元测试无误后并需要进行接口联调时,合并(merge)到dev(开发分支),触发开发环境持续集成过程。
  • 联调 : 提交到开发环境进行前后端联调,当联调通过之后,按照约定时间进行前后提测(前后端可分别提测),提测时,由开发人员将dev(开发分支) 合并(merge)到test(测试分支)上,触发测试环境持续集成过程。
  • 提测 : 提交测试后,测试人员对测试环境进行验证,测试中产生的bug,开发人员应该在feature上面进行修复,然后统一按批次和时间进行重新推送(push)开发分支(dev)和合并(merge)测试(test)过程
  • 上线 : 当测试环境代码已满足本次迭代所有功能,并且所有测试中产生的bug全部修复得到验证时,此时由研发负责人发起Pull Request (PR)test -> main提交到,并编写上线清单(包含上线数据脚本,外部依赖服务,上线配置细节等等),通知负责生产环境的同事合并,按照上线约定时间和上线清单进行上线。
  • 修复 : 当线上遇到需紧急修复的问题时,由开发人员从main分支创建出hotfix分支,在此分支上修改代码后,合并到测试环境,经过测试验证通过后由研发负责人发起Pull Request(PR)hotfix -> main,进行紧急修复上线流程。

说明: 此分支策略下,feature分支可以看作为开发人员熟悉的local分支,feature,dev,test均允许互相合并(merge)

多功能并行迭代型分支策略

适用场景: 多迭代版本并行开发,分别提测流程,分别上线流程,差异化上线

不适用场景: 多并行开发版本中有交叉内容。

适用人数:3-5人和20人以上

流程图说明

  • 功能开发 : 开发人员按组在不同的对应迭代分支(feature-xx)上开发(包括修复bug),在功能分支开发自测,单元测试无误后并需要进行接口联调时,合并(merge)到dev(开发分支),触发开发环境持续集成过程;多功能分支可并行开发。
  • 并行联调 : 提交到开发环境进行前后端联调,当联调通过之后,按照约定时间进行前后提测(前后端可分别提测),提测时,由开发人员将feature-xx(功能分支) 合并(merge)到test(测试分支)上,触发测试环境持续集成过程。
  • 并行提测 : 提交测试后,测试人员对测试环境进行验证,测试中产生的bug,开发人员应该在feature-xx上面进行修复,然后严格统一按批次和时间合并(merge)开发和合并(merge)测试(test)过程,以避免频繁发布造成测试环境不稳定。
  • 功能上线 : 当测试已满足本次迭代所有功能,并且所有测试中产生的bug全部修复得到验证时,此时由研发负责人发起Pull Request(PR)feature-xx -> main,并编写上线清单(包含上线数据脚本,外部依赖服务,上线配置细节等等),通知负责生产环境的同事合并,按照上线约定时间和上线清单进行上线。
  • 修复 : 当线上遇到需紧急修复的问题时,由开发人员从main分支创建出hotfix分支,在此分支上修改代码后,合并到测试环境,经过测试验证通过后由研发负责人发起Pull Request(PR)hotfix -> main,进行紧急修复上线流程。

使用注意

  • 此分支策略下,dev作为开发环境公共验证分支,test作为公共提测分支,feature-xx分支作为主要并行开发使用分支 ,最终会直接PR到main(主分支), 开发人员务必最大程度保证此分支代码的稳定。
  • 务必禁止开发人员对devtest进行相互合并(merge);禁止任何从feature-xx -> mainhotfix -> main以外内容发起的Pull Request (PR)
  • 所有feature-xx分支不可进行相互合并(merge)

Gitlab分支策略建议指南的更多相关文章

  1. git 入门教程之分支策略

    默认情况下合并分支常常直接使用 git merge 命令,是最方便快速的合并方法.其实这种情况下 git 采用的是 fast forward 模式,特点是删除分支后,会丢失分支信息,好像从来没存在该分 ...

  2. Git Flow分支策略

    就像代码需要代码规范一样,代码管理同样需要一个清晰的流程和规范 Vincent Driessen 同学为了解决这个问题提出了 A Successful Git Branching Model 下面是G ...

  3. 【干货分享】大话团队的GIT分支策略进化史

    封面 作为一名85后的技术男,一转眼10年过去了(一不小心暴露了年龄,虽然我叫18岁fantasy),亲手写代码已经是5年前了,目前主要负责公司的软件产品的规划和设计(所以最近写的东西也主要与设计和产 ...

  4. Git复习(三)之分支管理、分支策略

    创建合并删除分支 我们知道每次提交git都会将他们串成一条线,这条时间线就是一个分支.在git里这条时间线叫做主分支,即master分支 HEAD指向master,master指向最新的提交,所以,H ...

  5. Centos 7防火墙策略配置指南

    Centos 7防火墙策略配置指南 -- 清听凌雪慕忆 @ 目录 1. 开启防火墙 1.1 user切换到root用户 1.2 查看防火墙服务状态 1.3 查看firewall的状态 1.4 启动/关 ...

  6. abapGit分支策略

    各位ABAP公民们.特别是使用abapGit的各位,你们好. 我的团队和我将向大家分享我公司内引入abapGit后产生的某些开发问题.我所在的公司是一家创作SAP第三方软件的公司,目前主要使用ABAP ...

  7. git 分支策略

    转 http://www.ruanyifeng.com/blog/2012/07/git.html  作者: 阮一峰 如果你严肃对待编程,就必定会使用"版本管理系统"(Versio ...

  8. Azure Storage Client Library 重试策略建议

    有关如何配置 Azure Storage Library 重试策略的信息,可参阅 Gaurav Mantri 撰写的一篇不错的文章<SCL 2.0 – 实施重试策略>.但很难找到关于使用何 ...

  9. gitlab分支代码本地拉取及jenkins关联gitlab分支

    git本地拉取 git init git remote add origin http://47.*.*.*:8089/back_dev/claimeureka.git git fetch origi ...

随机推荐

  1. 创建第一个c程序

    创建,组织,生成 ,生成. 1.我们先创建一个win32项目. 文件->新建->项目->Visual C++ ->Win32   输入项目名称   选择项目保存位置 很重要的一 ...

  2. 技术管理进阶——一线Leader与大Leader的差异是什么?

    原创不易,求分享.求一键三连 ​ 前几年,因为下属的一些骚操作,Leader对我产生了误会,这导致了一些"不信任",这种不信任在短时间会让人丧失安全感,很多人会因此患得患失. 这种 ...

  3. javaScript中Math内置对象基本方法入门

    概念 Math 是javaScript的内置对象,包含了部分数学常数属性和数学函数方法. Math 不是一个函数对象,用户Number类型进行使用,不支持BigInt. Math 的所有属性与方法都是 ...

  4. python 本地配置文件库 Dynaconf 简介

    [前言] 在项目中经常会遇到以下几种需要用到配置文件的场景: 相同的配置参数用在不同的代码中,如果需要调整,则需要手动将各个使用到的地方都相应调整. 密码等信息不想硬编码在项目文件中. 配置文件的格式 ...

  5. ubuntu 18及以上版本配置IP的方法,你get了吗

    本文讲讲 Ubuntu 18 及以上版本配置 IP 的方法,为什么它值得一讲,因为以 Ubuntu 16 为首的版本的配置方法已经不适用了,如果你还不知道,那本文正好 get 一个新技能. Ubunt ...

  6. SpringBoot从0到0.7——序言

    SpringBoot从0到0.7-- 序言 最近做java代码审计发现很多地方看不懂,所以就开始学框架,自己做网站来了解网站的运行原理.函数.接口.参数等等,通过学习SpringBoot框架来从点到面 ...

  7. RESTFul是一种风格

    只要符合RESTFul风格的,都可以叫做使用了RESTFul架构,一般的网站里传数据,都是用的?a=1&b=2...如果是RESTFul风格的话,就会是/a/1/b/2..类似于这样的方式来传 ...

  8. Hadoop介绍篇

    Hadoop详解 1.前言 对于初次接触Hadoop的小伙伴来说,Hadoop是一个很陌生的东西,尤其是Hadoop与大数据之间的关联,写这篇文章之前,我也有许多关于Hadoop与大数据的疑惑,接下来 ...

  9. SpringBoot Redis 实践指南

    前言 SpringBoot Cache 是一个很好的缓存框架,可以兼容多种缓存实现,数据量较大的情况下,Redis 应该是最多被使用的. 本文重点介绍 SpringBoot 和 Redis 整合使用的 ...

  10. Servlet——HTTP状态 405 - 方法不允许

    问题描述: 使用Servlet调用doGet方法时报错: 此URL不支持Http方法GET 源代码: 解决方案: 删除super.doGet(req, resp);