# 开发流程与版本管理规范## 版本号规则如非特殊说明,所有产品的版本号将遵循 主版本.次版本.BuildNumber 的规则。
- 主版本号:发布重大更新时增加
- 次版本号:发布新功能点时增加
- build number:  打包的编号, 日常更新,bug 修复, 功能优化例如 2.1.34, 2 是 主版本号, 1为次版本号, 34 是 build number.   主版本号变化时次版本号清零,但是 build number 不清零,一直累加。2.1.34 的下个版本号是 3.0.35 、 2.2.35 或者 2.1.35 之一。## 代码库版本管理公司的代码库使用 git 管理版本。 不熟悉 git 同事请先阅读 git 的 相关文档: https://gitee.com/progit/下面描述公司的 git 的 使用规范。![123123](/Users/luoxin/Desktop/123123.png)### 主要分支代码库中包含两个主要的分钟1. master
2. developorigin/master 的最新版本应与生产环境当前版本一致, master 分支上的所有历史版本与线上生产环境的历史版本一一对应。origin/develop 分支是开发集成的版本。当 develop 分支的当前版本达到稳定状态,意味着可以向生产环境发布了。这时 develop 分支需要通过某种方式合并到 master 分支并且打上发布版本号 tag。 后面我们将详细说明这个过程。因此**每当有修改合并到 master 分支, 意味着我们产生了一个新的版本号。这个规则必须严格遵守,matser 分支发生改变时将触发持续集成工具和脚本自动打包, 推送到生产环境。**### 支持分支除了  master 和 develop 两个主要分支,  我们还使用多种支持分支来协作日常开发。与主要分支不同,这些分支可能生命周期比较短,一个支持分支合并到主要分支后将被移除。支持分支主要分三种:
1. 功能特性的分支
2. 发布分支
3. 紧急修复分支每种分支都有不同的作用并且遵循不同的 fork 、合并和命名规则。从 git 角度看,各种分支并不存在特殊性, 只是我们依据我们的开发流程需要产生的一种使用规范。#### 功能特性分支**起源分支:**
develop**合并对象分支:**
develop**命名规则:**
除了 master, develop, release-\*,  or hotfix-\*  之外没有特殊限制功能特性分支用来开发新功能,可能这个功能是下一个版本将要分布的,也可能会在更后期的版本中发布的。当我们开始开发一个新功能时, 这个功能将在哪个版本中发布可能是未知的。这个功能特性开发完成后会合并到 develop 分支然后并删除分支;或者如果开发到某个阶段产品设计上认为这个功能可以被砍掉, 那这个分支将会被丢弃。```
//开始开发 myFeature 功能时,我们在 develop 分支的基础上创建一个 myFeature 的新分支
git checkout -b myFeature develop// 提交代码, 注意: 提交信息一定要写清楚
git commit // 将分支推送到 git 服务器
git push --set-upstream origin myFeature
```如上所述, 一个功能特性分支一般经过:创建=>提交=>推送 的过程。
**`注意:` commit 时一定要写清楚修改了什么, 测试同事才好针对性的测试,建议每做一个小修改就提交一次,这样 commit message 才能准确描述所做的修改, 而不是等到整个功能都做完,推送之前再一次性提交。**push 到服务器后,请到内部的 gitlab 上提交 merge request。收到 merge request 的同事需对代码进行审查, 确定没有明显的 bug 后再合并到 develop 分支。这时这个功能特性分支的生命周期就结束了,可以删除。```
// 删除分支
git branch -d myFeature
```#### 发布分支
**起源分支:**
develop**合并对象分支:**
develop 或  master**命名规则:**release-\*发布分支是为发布到生成环境做准备的。当所有需要发布的功能特性都已合并到develop 分支, 并且经过测试到达相对稳定的状态后, 我们在 develop 分支的基础上创建一个新的 release-* 分支。**这个 release-* 分支 不应该包含那些不在此次发布计划中的功能,因此那些功能相对应的分支必须等 release-* 分支创建之后再合并到 develop.**release 分支创建时将分配一个版本号(此处应有脚本来管理版本号), 如 release-1.038,  并且生成版本日志。 ```
git checkout -b release-1.2.56 develop
```**`此分支在正式发布到正式环境之前,可能会有一些 bug 修复, 但是新功能的代码不允许提交到此分支。`**```
// 在 release 分支基础上创建用于 bug 修改的分支, 分支的命名规则应该为 release-*_bug*
git checkout -b release-1.2.56_bug1 release-1.2.56git commitgit push --set-upstream origin release-1.2.56_bug1
```bug fix 的分支推送到服务器,经审核后合并到 release-\* 分支。直到 bug 修复到了允许发布到生成环境的状态时需要将此分支分别合并到 master 分支和 develop 分支.1. 将 release 分支合并到 master```// 切换到 master 分支git checkout master// 将 release 分支合并到 master 分支git merge --no-ff release-1.2.56// master 分支打上 taggit tag -a 1.2.56```2. 将 release 分支合并到 develop```// 切换到 master 分支git checkout develop// 将 release 分支合并到 develop 分支
git merge --no-ff release-1.2.56```将 release 分支合并到 develop 分支后,  develop 分支也有了bug fix 的代码。 这时  release-1.2.56 不再需要了,可以被删除```
git branch -d  release-1.2.56
```#### 紧急修复分支**起源分支:**
master**合并对象分支:**
develop 和  master**命名规则:**hotfix-\*紧急修复分支跟 release 分支类似,都是为发布版本准备的。当线上生成环境有重大的 bug 需要紧急修复,而此时 develop 分支还不稳定,无法发布,我们在 master 分支基础上创建一个 hotfix 分支, 修复 bug 后合并到 master ,再发布到生成环境。```
// 命名规则建议为 hotfix-*, * 为当前的 master 的 tag 版本号
git checkout -b hotfix-1.2.35 mastergit commit -m "Fixed severe production problem"git push
```hotfix 分支提交后,经代码审核合并到 master 分支,  打上 tag 就可以推送到生成环境了```
// 切换到 master 分支
git checkout master// 合并
git merge --no-ff hotfix-1.2.35// 更新 tag 版本号,准备推送到生成环境
git tag -a hotfix-1.2.36
```除了合并到 master 分支, 还需要合并到 develop 分支, 这样 develop 也包含了针对 bug 的修改。` 如果此时存在 release 版本, 应该合并到 release 分支,而不是 develop 分支,这样下一次发布会包含对 bug  的修改。 release 分支最终也会被合并到 develop 分支。 ````
git checkout develop
git merge --no-ff hotfix-1.2.35
```bug 修复了 hotfix 分支就可以删除了```
git branch -d hotfix-1.2.35
```## 如何保障代码质量开发过程中我们采用自动化的单元测试与人工代码审查相结合的方式来保障代码质量
>目前这两项工作刚开始实施,需要一段时间磨合团队。### 单元测试编写单元测试代码, 利用 Git pre-push hook 在推送前自动运行单元测试。未通过单元测试将会中断推送。某些情况下可能因为开发人员的 git hooks 配置错误,造成代码未通过单元测试,也被推送到了服务器。 代码提送到服务器后, 持续集成工具自动拉取最新的代码,再次运行单元测试,测试失败的代码会被标注出来。### 代码审查往代码库的 develop,  release,  master 分支合并分支前,必须对修改进行审查。## 测试发布流程产品发布分为两种:
1. Bug 修复或优化
2. 功能特性发布Bug 修复或者优化发布频率会很高,1~2 天一次。
测试每次验证已修复的bug,产品确认修改完成,测试提起发版本请求,记录修复的bug,存在的问题(不影响本次发布),并确认存在问题的修改意见。请求通过先发布到预生产环境,在预生产环境中再次测试,确认没有影响版本发布的问题,产品发布到生产环境。如果存在影响发布的问题,立即终止本次发布,修改存在的问题,再次测试,提起发布流程。
这种版本的主版本号和次版本号不会发生变化,只有 build number 会增大。 功能特性的发布事先制定计划,有相应的里程碑管理。测试根据相应的时间点进行功能测试和系统测试,确认没有影响发布的bug,记录存在的问题(不影响发布),并确认存在问题的修改意见。测试此时提起发布版本的请求。请求通过先发布到预生产环境,再次进行完整的测试。确认没有影响版本发布的问题,产品发布到生产环境。如果存在影响发布的问题,立即终止本次发布,修改存在的问题,再次测试,提起发布流程.### Bug 管理Bug 按严重程度分三个等级1. 关键, 关键类 bug 影响线上主体业务流程, 必须当天修复。
2. 重要, 重要类的 bug 必须在提出 bug 当天有开发者确认,并设置修复时间。
3. 一般, 提出bug 2天内,开发者确认并设置修复时间

  

转载于:https://www.cnblogs.com/lianruihong/p/9367512.html

开发流程与版本管理规范相关推荐

  1. 究竟什么样的开发流程是规范的?

    概述 有读者反馈,读了文章 一线技术管理者究竟在管什么事?收获满满,但还有点不过瘾,还想了解更细的东西... 这篇文章分享开发流程规范,目的是提高产品质量,优化开发流程,供大家参考. 规范是死的,人是 ...

  2. 阿里开发规范_字字珠玑,高级技术专家带你了解阿里的开发流程规范

    此前,阿里高级技术专家孔凡勇(云狄)老师撰写了在 Alibaba 成为优秀的技术主管,需要在"开发规范.开发流程.技术规划与管理"方面有自己的深入思考文章.受广大读者的需求,我们邀 ...

  3. 系统工作开发流程规范

    系统工作开发流程规范 摘要:我负责的公司的财务系统建设,主要是结算系统和报销系统,*因为排期.需求不明确,导致大家都很累.*财务部门是我们的主要对接方,财务系统作为公司OA系统中的一环,目的是为了解放 ...

  4. 3000字梳理大数据开发流程及规范(建议收藏)

    在大数据时代,规范地进行数据资产管理已成为推动互联网.大数据.人工智能和实体经济深度融合的必要条件.贴近业务属性.兼顾研发各阶段要点的研发规范,可以切实提高研发效率,保障数据研发工作有条不紊地运作.而 ...

  5. 软件项目开发流程以及人员职责 实行软件工程项目管理: ▲ 项目经理(负责人):项目经理(负责人)对整个项目负完全责任,是指导、控制、管理和规范某个软件和软/硬件系统建设的人,项目经理(负责人)是最终

    转载自csdn(danieldaniel19851023的专栏) 软件项目开发流程以及人员职责 实行软件工程项目管理: ▲ 项目经理(负责人):项目经理(负责人)对整个项目负完全责任,是指导.控制.管 ...

  6. 中小企业怎样搭建软件安全开发流程和规范

    文章目录 微软SDL相关内容学习记录 微软SDL介绍 SDL核心概念 SDL优化模型 SDL适用性 SDL角色分工 简化的SDL安全活动 必需的安全活动 培训 要求 设计 实施 验证(对应的是测试阶段 ...

  7. 改进公司代码版本管理工具CCMS及优化开发流程

    2010-12-31更新的内容 目前本人在做developer,日常工作中与代码打交道的机会不少.公司使用CCMS对产品进行版本控制,这套系统的工作原理类似于SVN,它的全称可能是叫做什么什么Code ...

  8. Git学习总结(23)——Git commit message和版本管理规范总结

    一.Git commit message基本规范 对格式的说明如下: type代表某次提交的类型,比如是修复一个bug还是增加一个新的feature.所有的type类型如下: feat: 新增feat ...

  9. day02Web开发流程图解

    Web开发流程图解 一 需求分析阶段 二 项目开发阶段 2.1产品设计.>PM\UE\UI 2.2测试用例.>QA 2.3前端设计.>FD 2.4后端设计.>RD 2.5开发 ...

最新文章

  1. JSONP 跨域的原理
  2. 剑指offer 算法 (举例让抽象具体化)
  3. Java数据结构与算法:栈
  4. MyBatis 源码分析 - 缓存原理
  5. 《DSP using MATLAB》示例Example7.20
  6. sympy —— Python 符号运算
  7. python不会英语不会数学怎么自学-文科女生学Python:学过初中数学和英语就能懂的编程逻辑...
  8. NASA 用哈勃望远镜定格你的星空
  9. java里equal与equals_Java中关于==与equal和equals的区别
  10. java下一页按钮_如何仅使用Spring在Java中单击提交按钮后才能转到下一页
  11. ServiceComb 课程
  12. 华为服务器如何开机自动启动不了,华为手机开不了机怎么办 开机后一直停留在开机画面的解决方法(3)...
  13. 「JCVI教程」如何基于物种的CDS的blast结果绘制点图(dotplot)
  14. CRMEB小程序商城源码安装后,个人中心推广海报不显示处理方法!
  15. OpenCV入门-05读取并播放视频
  16. 系统自己弹出诸如 kernel:NMI watchdog: BUG: soft lockup - CPU#2 stuck for 26s [mysqld:2875]
  17. 腾讯2014校园招聘2013.10.26杭州笔试题
  18. ArXiv简介以及论文提交
  19. 第一章 Sqoop专题之常见面试题
  20. [渝粤教育] 浙江万里学院 审计学 参考 资料

热门文章

  1. 禁止显示“You have new mail in /var/spool/mail/root”
  2. iOS中的UIAlertView之新方法(弹出警告框)
  3. 停笔几天,休息一下也顺便思考一下人生
  4. SVN项目锁定解决方案
  5. DevExpress z
  6. [POJ 1741] Tree
  7. BAPC2014 Bamp;amp;HUNNU11582:Button Bashing(BFS)
  8. 边工作边刷题:70天一遍leetcode: day 97-1
  9. c - 字符串的拼接.
  10. Z-Stack - Modification of Zigbee Device Object for better network access management