多人协作如何管理Git分支
关于Git分支管理,每个团队在不同阶段都有自己的管理策略,最近我们团队也争论过这个问题。
据了解,我们团队以前采用的是版本分支管理策略,也就是每次上线新版本都会创建一个新的版本分支,而新的需求开发也从当前最新的版本分支迁出一个新的需求分支开发,线上bug则在版本分支上修改然后发布。
在我接手项目的时候发现一个问题,由于拆分的微服务项目以及组件不在同一个project里面,我拉取全部项目代码后全部切换到master分支居然构建失败,提示xx类没有xxx方法,然后我全部切换到test分支情况依旧。后面同事找出的原因是新版本的代码没有合并到master分支。显然,版本分支成了项目的主分支,而master分支相当于一个弃用的分支。
由于项目目前全部容器化部署,并且走自动化部署,因此版本分支已经不适用了,目前采用的策略是线上master分支,测试test分支,当开发完成需求后将需求分支合并到test分支交给测试的同事去测试,测试完成后由开发合并到master分支部署。
这种策略同样存在问题,首先,开发不应该有权限修改master分支,其次,多个需求一同合并到master分支出现冲突会影响发布。
在发布新版本之前,我们应该确保已经解决所有代码冲突问题,因此应该多出一个分支,只有该分支的代码可以直接合并到master分支,所有需要在下个版本发布的需求分支通过测试后都应该先合并到该分支,在上线前再由项目负责人发起合并到master的请求,由部门主管处理合并请求,或者由项目负责人直接处理合并。
我并不看好自动触发构建发布生产环境这种策略(代码一合并到master分支就自动发布),因为往往在发版之前都需要做一些准备,等所有准备就绪后再按顺序去发版,例如数据库表结构的修改、配置文件的修改(开发人员不应该拿到生产环境的配置)。
此外,自动触发构建发布生产环境也不支持蓝绿/灰度发布,当然了,我们项目目前也不需要蓝绿/灰度发布,所以说,每个团队在不同阶段都有适合自己的管理策略。
以下分享笔者前后就职的三个公司当时采用的分支管理策略。
目前我们团队使用的分支管理策略
- 生产分支:master
- 测试分支:test
- 需求分支:${需求}
开发人员开发需求需创建需求分支,需求开发完成后合并到test分支,测试人员在test分支上测试。
测试人员提交bug后,开发人员需切回需求分支修复bug,修复完成后合并到test分支,如此往复。
需求测试通过后,由开发合并到master分支发布。
线上bug直接在master分支修改,修改完成在master分支发布。
这种方案直接在master分支修复线上bug绕过了测试,而且每个开发都有master分支的提交权限,存在很大的风险,因此这种方案只适合小团队。
老东家使用的分支管理策略
- 开发分支:dev
- 生产分支:master
- 测试分支:test
- 需求分支:${需求}
- 版本分支:relese-${version}
开发人员开发需求需创建需求分支,开发完成后由测试人员切换到该需求分支测试,或者批量测试的话就将多个需求分支合并到test分支。
测试人员提交bug后,开发人员需切回需求分支修复bug,修复完成后再通知测试人员切换到该分支测试,或是合并到test分支测试,循环往复。
需求测试通过后,由开发人员/开发组长将需求分支合并到dev分支,在约定的版本上线时间由开发组长提交将dev分支合并到master分支的请求,由主管合并分支。
最后,每次发版之后都将dev切出一个relese-${version}分支,线上bug在此分支修改,并且修改完成后测试需切到该分支测试,测试完成后就可以直接合并到master分支发布。
前前公司使用的分支管理策略
无分支管理策略,没有测试环境,需求在需求分支开发,开发完成后由开发自己测试,觉得没问题了就直接合并到dev分支,然后发布。master分支也是弃用的。有些简单的需求以及线上bug都是直接在dev分支改动。(没有测试就直接上线,非常的恐怖)。
本文转载自微信公众号「Java艺术」,可以通过以下二维码关注。转载本文请联系Java艺术公众号。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
基站数量破百万!三大运营商正式宣布好消息,5G普及还会远吗?
三大运营商正式宣布好消息 从2G到3G再到4G,国内的通讯网络经历了几十年的更迭,人们的上网体验也变得越来越好。而现在4G已经不是最先进的通讯技术了,用户们也能感觉得到4G网络变卡了,这是因为5G网络时代即将到来,4G终有一天会被淘汰。 5G这个概念与之前的3G和4G并没有什么区别,指的是第五代移动通讯技术,也是目前全球最先进的蜂窝网络。据了解,在实验室条件下,5G的最高上网速度可达10GB每秒,是4G的100倍,而且还具有超低延迟、超大网络容量等优势。 当然了,实际生活中的5G网络肯定达不到实验室的水平,但不可否认的是,5G确实要比4G更加优越。通过5G的各种优势,以前看起来不可能实现的技术都将变成现实,比如说虚拟现实、人工智能和自动驾驶等等,5G的应用范围远比4G广泛。 正因于此,全球各个国家对5G都很关注,各大通信公司也是不遗余力地研发其核心技术。而就如今的局面来看,得益于华为、中兴等国产企业的鼎力支持,我们国内的5G已经走在了世界的前沿,并且逐渐开始朝着成熟完善的方向发展。 在国内5G建设过程中,除了华为等公司的技术支持以外,三大运营商的基建工作也尤为关键。国内5G的全面领先,...
- 下一篇
合理规划:如何为APP选择正确的数据库?
本文转载自公众号“读芯术”(ID:AI_Discovery) 从事新项目总是令人极度兴奋——可以自由地以自己喜欢的方式设计和构建项目。但如果规划得不合理,就会给未来带来麻烦。需要作出的最关键的决定之一就是选择APP数据库,而此文的目的就是介绍数据库的选择方案——并列举其优势和弊端以帮你明智地选择数据库。 键值 数据库的结构像JSON对象,每个键都是唯一的,每个键都指向某个值。 它把数据保存在内存中,运行速度快,但有容量限制,所以难以存储大量数据。由于没用到硬盘,因而运行非常的快。因为不涉及查询或连接,因此不需要担心数据建模。由于没有模式,开发人员总是可以灵活地根据自己的喜好更改数据。 使用条件: 这种技术主要用作缓存机制,频繁获取和观察数据的某些部分时使用。 因此,键值技术作为缓存机制,普遍与其他数据库结合使用。 宽立柱 宽立柱像注射了类固醇的键值。值被修改为存储一组列,而不仅仅是普通数据。 引入一组列之后,现在可以给相关数据分组,但仍没有标准的模式。因此,每个键可以指向不同分组的数据。 由于没有模式,它可以处理非结构化数据,并附带一种名为CQL的查询语言,类似于SQL,但功能要弱得多...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8编译安装MySQL8.0.19
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)