我们的项目使用Git作为代码仓库、和版本控制工具。

Git有几种Workflow,来管理代码版本变更流程,我们采用Gitflow Workflow流程。

Gitflow Workflow,采用了master、develop、release、feature、hotfix等几个分支。master、develop分支的生命周期是永久的,release、feature、hotfix分支都是辅助分支,其生命周期是短暂的。

各个分支的作用及意义,见下。

master分支

master分支用于保存官方发布历史,与线上的版本一致。要确保任何时候从master分支都可以拿到处于可发布状态的代码。

一个工程只有一个master分支,创建Git工程后自动创建,生命周期为永久。

跟master分支打交道的分支有release分支、hotfix分支:

  • 测试通过后,“配置管理员”(以下简称为“配管”)将release分支合并到master分支。
  • 线上紧急修复后,“配管”将hotfix分支合并回master分支。

release分支合并到master分支后,需要在master分支上打Tag(记录里程碑),标记官方发布的版本号。

版本号的命名规则

命名规则:vx.y.z

  • x: 大版本号,有重大功能发布时升位。
  • y:中版本号,增加新功能或功能优化改进时升位。
  • z:小版本号,有hotfix时升位。

“配管”负责在master分支上打Tag。

develop分支

develop是开发集成的分支,所有开发完成的代码提交到此分支。功能累积到一定程度或者周期性发布需要提测时,从此分支迁出代码到release分支,进行测试。要确保任何时候都可以从develop分支拿到最新开发进展的代码。

一个工程只有一个develop分支,最初由“配管”创建,生命周期为永久。

跟develop分支打交道的分支有release分支、hotfix分支、feature分支:

  • “开发主管”提测时,“配管”从develop分支迁出代码到release分支。
  • release分支测试通过后,“配管”将release分支合并回develop分支。
  • 线上紧急修复后,“配管”将hotfix分支合并到develop分支。
  • 功能开发完成后,“开发主管”(需要多人协作开发的feature)或各个开发(独立开发的feature)将feature分支合并到develop分支。

release分支

release是测试分支,用于测试某个待发布的版本。从develop分支迁出代码到release分支,冻结代码(除了修改bug),进行测试。测试通过后合并到master分支,正式发布。

release分支使得待发布版本的测试与新版本的开发活动可以并行,互不干扰。

一个工程有多个release分支,一个待测试的、准备发布的版本一个分支。release分支的生命周期不是永久的,最初起源于develop分支,最终归于master和develop分支。提测时,“配管”创建一个release分支;测试通过、合并到master分支及develop分支后,“配管”删除该分支。

跟release分支打交道的分支有develop分支、master分支:

  • “开发主管”提测时,“配管”从develop分支迁出代码、创建一个release分支。
  • release分支测试通过后,“配管”将release分支合并到master分支,同时合并回develop分支。

release分支的命名规则

命名规则:release_x.y.z

x、y、z的意义,同master的Tag。因为release分支一般用于发布新功能或功能优化改进,所以x、y会有升位,z取0。

测试、开发修改bug,都是在release分支上进行。在此期间,应严禁新功能的代码并入release分支,应合并到develop分支。

feature分支

feature分支是各个功能的开发分支,开发完成后合并到develop分支。

feature分支使得多个人可以并行开发,互不干扰。

一个工程有多个feature分支,一个feature一个分支。feature分支的生命周期不是永久的,最初起源于develop分支,最终也归于develop分支。开始开发一个新功能时,由“开发主管”或开发自己创建一个feature分支;功能开发完成、合并到develop分支后,“开发主管”或开发自己删除该分支。

跟feature分支打交道的分支只有develop分支:

  • 对于需要多人协作开发的feature:“开发主管”从develop分支迁出代码、创建一个feature分支,然后通知给需要协作的各个开发;各个开发在此分支上提交代码。各个开发的代码都提交后,“开发主管”将该feature分支合并到develop分支,然后删除该分支。
  • 对于不需协作、开发可独立完成的feature:可以由开发自己从develop分支迁出代码、创建一个feature分支;开发完成后,开发自己将该feature分支合并到develop分支,然后删除该分支。

feature分支的命名规则

命名规则:feature_xxx
xxx为功能的名称,如notification(通知)、circle(圈子)等。

hotfix分支

hotfix分支用于紧急修复线上的bug。

hotfix分支使得线上bug的紧急修复,与待发布版本的测试、以及新版本的开发活动可以并行,互不干扰。

一个工程有多个hotfix分支,一次hotfix创建一个分支。hotfix分支的生命周期不是永久的,最初起源于master分支,最终归于master和develop分支。提出hotfix时,“配管”创建一个hotfix分支;bug修改完成、合并回master分支以及develop分支后,“配管”删除该分支。

跟hotfix分支打交道的分支有master分支、develop分支:

    • 需要紧急修复线上bug时,“配管”从master分支的某个Tag(一般是最新的)迁出代码、创建一个hotfix分支。
    • bug修改完成、测试通过后,“配管”将该hotfix分支合并回master分支,同时合并到develop分支。

hotfix分支的命名规则

命名规则:hotfix_yyyymmmdd

yyyymmdd为提出hotfix的日期,一般情况下hotfix的bug必须当天修复、发布。

hotfix分支合并回master分支后,需要在master分支上打一个Tag,标记当前版本,小版本号升位。

具体到一个工程中,各个阶段的具体流程为:

项目启动

准备开发环境

测试流程

发布流程:

hotfix流程:

Git代码版本控制流程的更多相关文章

  1. git代码提交流程

    1.进入我的项目文件夹所在目录: 2.git status 查看我修改过的文件: 3.git add -A 将修改的文件全部添加, git add 文件名  只添加指定的文件名: 4.git comm ...

  2. Git Flow 代码版本控制模型

    说到代码版本控制,推荐一下最新的Git.跟SVN相比,最大的区别是它在本地也保存了一个代码库,这样可以离线工作,首先将代码提交到本地仓库,联网之后再同步到服务器端.代码托管网站 Github 和 Bi ...

  3. Git 结合Git使用Bitbucket进行代码版本管理流程规范与实践

    结合Git使用Bitbucket进行代码版本管理流程规范与实践   By:授客 QQ:1033553122   目录 目录 1 一. 测试环境 2 二. 新建项目 2 三. 新建公有版本库 3 四. ...

  4. 代码版本控制[version control]之Git

    如何多人协同开发同一个项目? 使用代码版本控制[version control]软件, 目前市面上比较流行的代码版本控制器有: git,svn,csv 1. 使用git管理代码版本 本项目使用git管 ...

  5. Git代码仓库的建立流程

    Git作为现在比较流行的版本管理工具,其配置非常简单.方便. 下面举一个简单例子,说明如何在服务器上建立一个公共的git代码仓库. 1.确保服务器上已经打开ssh服务,可以用ps -e | grep ...

  6. Git分布式版本控制教程

    Git分布式版本控制Git 安装配置Linux&Unix平台 Debian/Ubuntu $ apt-get install git Fedora $ ) $ dnf and later) G ...

  7. 使用VSTS的Git进行版本控制(四)——在Visual Studio中管理分支

    使用VSTS的Git进行版本控制(四)--在Visual Studio中管理分支 可以从web版Team Services Git repo 的Branches视图中管理工作.定制视图来跟踪最关注的分 ...

  8. 使用VSTS的Git进行版本控制(三)——评审历史记录

    使用VSTS的Git进行版本控制(三)--评审历史记录 Git使用存储在每个提交中的父引用信息来管理开发的完整历史记录.评审该提交历史记录,能够找出文件更改的时间,并确定代码版本之间的差异. Git使 ...

  9. 使用VSTS的Git进行版本控制(二)——提交保存工作

    使用VSTS的Git进行版本控制(二)--提交保存工作 当对文件进行更改时,Git将在本地仓库中记录更改.可以通过选择变更来提交的对应更改.提交总是针对本地的Git仓库,因此不必担心提交是完美的,或者 ...

随机推荐

  1. 属于我的md5sum程序

    目录 前言 介绍 使用说明 总结 前言 之所以想做这个软件是因为一直在使用的http://keir.net/hash.html软件有很多功能不能满足. 经过自学C#,研究多线程,异步更新UI,等等知识 ...

  2. 虚拟环境之间批量pip安装包"迁移"

    在某个虚拟环境中通过 pip freeze > requirements.txt 将该环境下所有的包写入文档, 然后切换至另一虚拟环境, pip install -r requirements. ...

  3. koa url path & koa-router

    koa url path & koa-router url path & regex koa path router "use strict"; /** * * @ ...

  4. useful podcast

    useful podcast front end podcast https://shoptalkshow.com https://stackoverflow.blog/podcast/ SoundC ...

  5. GoEasy使用阿里云OSS出现的问题

    前言:本人使用goeasy来实现微信小程序里面和其他人的im临时对话窗口,想要实现可以同时发送语音和视频.图片.表情包的话,就要通过goeasy关联到阿里云的存储对象. 报错:The OSS Acce ...

  6. NGK.IO网络安全大会暨区块链安全与应用创新论坛圆满落幕

    近日,NGK.IO网络安全大会暨区块链安全与应用创新论坛于美国McCormick Place国际会议中心圆满落幕. 论坛围绕"进化繁荣发展·安全链接未来"这一主题,由NGK.IO硅 ...

  7. Python爬虫_糗事百科

    本爬虫任务: 爬虫糗事百科网站(https://www.qiushibaike.com/)--段子版块中所有的[段子].[投票数].[神回复]等内容 步骤: 通过翻页寻找url规律,构造url列表 查 ...

  8. React组件复用的方式

    React组件复用的方式 现前端的工程化越发重要,虽然使用Ctrl+C与Ctrl+V同样能够完成需求,但是一旦面临修改那就是一项庞大的任务,于是减少代码的拷贝,增加封装复用能力,实现可维护.可复用的代 ...

  9. day1 分布式基础概念

    1. 分布式:一个业务分拆多个子业务,部署在不同的服务器上集群:同一个业务,部署在多个服务器上节点:集群中的一个服务器 2.远程调用 分布式系统中调用其它主机 springcloud用http+jso ...

  10. Spring Boot移除内嵌Tomcat,使用非web方式启动

    前言:当我们使用Spring Boot编写了一个批处理应用程序,该程序只是用于后台跑批数据,此时不需要内嵌的tomcat,简化启动方式使用非web方式启动项目,步骤如下: 1.在pom.xml文件中去 ...