服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

基于 Git 的开发工作流——主干开发特性总结

日期: 来源:大淘宝技术收集编辑:喻鹏(乐念)




在参与开发的过程,得益与平台提供便捷的开发流程,简化很多开发过程操作分支的步骤;也就很好奇,为什么研发平台怎么设计,考虑的点是为什么,便有了这次对主干研发的学习与记录。

当我们是构建软件项目的唯一开发人员时,可以根据个人喜好创建和修改代码。当我们为团队运行的项目贡献代码时,我们需要遵循一套标准化的指导方针并与其他团队成员精确协调。标准指南和协调的工作努力对于每个基于团队的软件开发项目的成功至关重要。

为了满足这一需求,世界各地的工程团队设计了许多开发工作流程。大多数团队使用 Git 进行版本控制和管理他们的软件代码。基于 Git 的两种最流行的开发工作流是基于主干的开发和基于特性的开发。Facebook、谷歌、Netflix 和许多其他科技企业的团队使用这些工作流程。



基于特性的开发

  Git Flow


Git Flow 是为了解决多个不同特性之间并行开发需要的一种工作方式。当开始一个特性的开发工作的时候,从主干上拉出一个特性分支,所有的关于该特性的开发工作都发生在这个特性分支上,当完成该特性的工作之后,再把特性分支合并回代码主路径上,并准备发布。
master分支:主开发分支
develop分支:主开发分支
feature分支:功能分支,从develop切出分支,用于功能开发,开发完成后合并到主开发分支

release分支:发布分支,从develop切出分支测试或发布,发布完成后,把release合并到master和develop分支

hotfixex分支:从master切出,修复线上问题,修复后分支合并到master和develop分支



优点:每个分支描述清晰,对于不同问题不同场景,能够很好覆盖开发、发布、bugfix的流程
缺点:分支类型多,增加开发人员理解成本、操作成本(不同分支间合并冲突)


  GitHub Flow


相对Git Flow而言,GitHub Flow只有特性(feature)和主分支(master),当featrue合并到master之后,即部署生产。



优点:分支类型简单,能够频繁部署生产

缺点:没有release分支,没有很好回滚机制保障线上问题快速恢复;对于主干的可发布性保障极高


可能对于一些开源项目/个人项目,不要求过高的稳定性,也不需要预发/生产环境的场景,这种极致的简单,可能开发人员效率会更高一点。


  GitLab Flow


在GitHub Flow的基础上,有两个变化:使用环境分支和版本分支,引入了 Pre-production 和 Production 两种发布分支,featrue分支合并到主干不会立即发布,而是主干合并到对应的发布分支上触发对应环境发布:

基于日常/生产 环境的工作流程:这种多环境能够让 hotfix 或者 feature 分支能够在发布到生产环境之前被测试,而不像github flow那样简单粗暴。

基于版本分支的工作流程:当需要向外界发布软件时,使用发布分支;尽可能晚的发布一个大版本,这样可以最大限度地减少必须将错误修复应用到多个分支的时间长度;另外,发布分支后,修复错误尽量将错误合并到main分支,避免后续版本发布错误依然存在。

优点:对github flow进行补充,能够对不同项目有合理的分支发布选择
缺点:过于灵活,对于不同项目发布流程相差较大,研发平台很难统一维护


主干研发


主干研发:
团队开发人员之间通过约定向被指定为“主干”的分支提交代码,在变更开发完成后(开发、测试、CR)合并到主干,主干研发要求团队高频率的提交代码,通过持续测试保证主干的可发布性,避免长期存在的多分支导致的开发压力;

一般情况下,发布也是在主干分支进行,当需要隔离不兼容代码的时候,会从主干拉取固定的发布分支。图中红色圆点表示一次坏提交,在构建被破坏后立即被后面的提交修复了。



优点:
  1. 降低解决冲突的成本:开发人员在自己的分支上独自工作的时间越长,越难将变更并入主干。另外,当分支个数和每个分支上变更数同时增加时,合并难度会很大。
  2. 高质量的代码:日常工作中,不知道大家是否有一个习惯,合并代码通常会在项目的提测或上线前一段时间,日常的合并次数减少,转化到发布前处理大量的合并,以及大量的CR,该流程下,高频次的代码提交合并,将大块的代码切分到日常小块代码和CR,且合并需要通过相关卡口(构建、包依赖等),避免发布前才关注到CR和测试的问题
  3. 高效的持续交付:对于大规模的项目,主干分支保持鲜活(其他人的变动能够被及时感知),团队开发效率更好;不用等即可上线,基于特性分支迭代开发的模式,当多个变更集成到迭代时,一个变更完成,另外一个变更没有完成需要退出迭代;测试环境更加稳定,主干研发发布分支在固定分支上,当特性分支迭代有多变更情况,此时,创建的是一个临时发布分支,当有变更加入或退出时,会导致发布的环境不稳定。

缺点:
  1. 对团队的基础架构和协作能力的要求很高,要求每次commit的代码能够独立运行,如果合入主干的commit出现问题,会阻塞团队的进度。
  2. 对团队代码质量要求高,评审机制要求完善。需要有完善的 CR 机制,将问题代码尽可能在发布的前置环节发现并解决。

前端中可能适合的主干开发的场景


工具函数的开发:

  1. 开发阶段:工具函数的需求功能点容易切分,比如 env、cookie 这些工具类函数,可以作为切分为小的代码块,在上线之前通过自动化测试/自测,保证ci通过后,即可快速上线,新增功能;其他人提交功能后,能够及时感知到master的改动点。

  2. 发布阶段:主干开发天然基于版本发布,可以支持不同功能的版本

  3. bugfix:基于工具函数的bug,需要快速修复,通过CI后,合并到主干,发布修复的版本,不再拉取新的bugfix分支,解决可能存在的冲突问题。


基于特性开发流程:


基于主干开发流程:


总结


基于主干开发相对于分支开发的各种利弊,根据自己所在团队的实际场景来看待,选择用主干开发还是分支开发。如果主干开发的优势对自身产品可有可无,那么没有这种必要来切换。但是如果有必要,但是团队的成熟度和技能达不到,也不适合切换到主干开发。当选择要切换到主干开发,一定要有心里准备来应对变革过程中遇到的各种问题。当然当你的团队经历了这些阵痛并真正适应了主干开发,那么团队就的成长也是巨大的。


团队介绍


我们是大淘宝技术行业与商家技术团队,是消费电子线下业务,主要面向线下门店的分销、经营、零售相关的产品。技术侧属于大淘宝技术前端团队,技术产品服务阿里巴巴整个集团亿万级别的业务。


¤ 拓展阅读 ¤

3DXR技术 | 终端技术 | 音视频技术
服务端技术 | 技术质量 | 数据算法


相关阅读

  • Git 基本原理介绍

  • 简单地说,Git 究竟是怎样的一个系统呢?请注意接下来的内容非常重要,若你理解了 Git 的思想和基本工作原理,用起来就会知其所以然,游刃有余。在学习 Git 时,请尽量理清你对其它版本
  • 寻匠心 | 方志刚:用技术让油田变年轻

  • 天山网记者 张冬梅 通讯员 肖瑞  4月8日8时许,方志刚起床后匆匆洗了把脸,随即和同事驾车赶往100多公里外的井场。他们团队主导的多级气举阀连续油管气举新技术试验已进入关

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四
  • 美国对华2000亿关税清单,到底影响有多大?

  • 1 今天A股大跌,上证最大跌幅超过2%。直接导火索是美国证实计划对华2000亿美元产品加征25%关税。 听起来,2000亿美元数目巨大,我们来算笔账。 2000亿美元,按现在人民币汇率

最新文章

  • 基于 Git 的开发工作流——主干开发特性总结

  • 在参与开发的过程,得益与平台提供便捷的开发流程,简化很多开发过程操作分支的步骤;也就很好奇,为什么研发平台怎么设计,考虑的点是为什么,便有了这次对主干研发的学习与记录。当我
  • 他的英名和事业将永垂不朽!

  • 第二十八幕 永垂不朽1880-1883 辗转欧非岁月和疾病无情地侵蚀着人的生命,到19世纪70年代末,刚过60岁的马克思已经是垂垂老矣,1879年12月,《芝加哥论坛报》的记者前去采访马克思,
  • 买房子?是你的房子吗?那是银行的房子!

  • 这届年轻人变了。时光倒回二三十年前,年轻人想的是买房、买车,拼搏和闯荡。这届年轻人,只想攒钱、养老,摸鱼和躺平。我们好像早就承认这样一个事实,那就是,我们不会比七八十年代的
  • 我们如何对待世界,世界就如何对待我们

  • 1958年元月的一天,蕾切尔·卡逊接到一封来自美国马萨诸塞州杜可斯波里的信,居住在那里的朋友奥尔加·哈金丝抱怨说,飞机喷过DDT(双氯苯基三氯乙烷,上世纪50-60年代全球大面积使用