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

简介: 基于 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分支,解决可能存在的冲突问题。


基于特性开发流程:


基于主干开发流程:




总结


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


团队介绍


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


相关文章
|
7月前
|
项目管理 开发工具 git
Python面试题:Git版本控制与协作开发
【4月更文挑战第19天】本文聚焦于Python面试中Git版本控制与协作开发的考察点,涵盖Git基础、协作流程及实战示例。面试者需理解仓库、提交、分支等核心概念,掌握常用命令,熟悉主干开发和GitFlow策略。在协作开发中,要掌握Pull Request工作流,有效处理合并冲突,并善用标签与里程碑。注意避免混淆工作区、忽视代码审查和直接在远程分支上工作等常见错误。通过实例展示了如何在GitFlow策略下合并分支和解决冲突,强调持续学习与实践以提升Git技能。
70 1
|
7月前
|
开发工具 git 开发者
百度搜索:蓝易云【Git实际开发的流程】
以上是Git在实际开发中的一般流程。Git的分布式版本控制系统使得团队开发更加高效和灵活,并能有效管理项目的版本历史。
65 1
|
7月前
|
存储 开发工具 git
Git的正确使用姿势与最佳事件:团队协作开发和版本控制的最佳实践
Git 是目前最流行的分布式版本控制系统之一,它提供了强大而灵活的工具来管理项目的版本和协作开发。无论您是个人开发者还是团队成员,掌握 Git 的使用方法都是必不可少的。本文将引导您从 Git 的基础知识开始,逐步探索 Git 的进阶功能。
|
1月前
|
测试技术 持续交付 开发工具
掌握 Git 工作流:高效团队协作的关键
【10月更文挑战第22天】本文介绍了 Git 工作流的核心概念和最佳实践,包括分支策略、提交信息、代码审查和合并策略等。通过优化这些环节,可以提高代码管理效率,促进团队成员之间的有效沟通,从而提升团队整体的开发效率。适合开发者和团队管理者阅读。
|
1月前
|
开发工具 C# git
C#一分钟浅谈:Git 版本控制与 GitFlow 工作流
【10月更文挑战第22天】本文介绍了 Git 和 GitFlow 的结合使用,从基础概念到具体操作,涵盖了安装配置、基本命令、GitFlow 工作流的核心分支和流程示例。同时,文章还讨论了常见的问题和易错点,如忽略文件、冲突解决、回退提交和分支命名规范,并提供了代码案例。通过学习本文,读者可以更好地理解和应用 Git 及 GitFlow,提高团队协作效率。
58 1
|
2月前
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
42 1
|
2月前
|
编译器 开发工具 数据安全/隐私保护
Git——多人协作/版本控制,在一个gitee仓库下开发(Gitee版教程)手把手教学,包好用的!
本文提供了一个关于如何在Gitee上进行多人协作和版本控制的详细教程,包括新建和初始化仓库、克隆仓库、邀请好友共同管理仓库以及注意事项,旨在帮助用户顺利进行代码协作开发。
369 0
Git——多人协作/版本控制,在一个gitee仓库下开发(Gitee版教程)手把手教学,包好用的!
|
2月前
|
Linux 开发工具 git
企业级Git管理工作流分析--GIT实战详解
企业级Git管理工作流分析--GIT实战详解
49 0
|
7月前
|
数据可视化 Go 开发工具
cggit 简化 Git 提交、合并、分支偏移小神器,提升开发、修BUG效率!
cggit 简化 Git 提交、合并、分支偏移小神器,提升开发、修BUG效率!
80 0
|
4月前
|
存储 安全 开发工具
掌握这5个Git高级命令,让你的开发效率飞速提升!
掌握这5个Git高级命令,让你的开发效率飞速提升!