本文分享自华为云社区《【云小课】应用平台第44课 常用Git工作流推荐》,作者: 应用万花筒. 。

1. Git工作流—动静有法

简单来说,工作流就是开发团队预置的开发流程和解决问题时使用的协同约定。合理选择工作流可以帮助团队更好地进行项目管理与版本控制,因此在选择工作流时,需要着重考虑团队情况、规模、项目属性与版本管理计划。

2. 华为开发者常用的工作流

3. Git Flow—经典永不过时

在基于分支的代码管理工作模式中,“Git Flow”在2010年被提出时,便被业界认可并广泛应用,至今仍是经典,它充分发挥了Git分支工作模式的精髓。“Git Flow”工作模式并没有用到复杂的命令和Git底层的结构,是为不同的分支分配一个很明确的角色,并定义各分支之间何时、如何进行交互。类似于经典的瀑布式项目管理模型,“Git Flow”相对庞大复杂,适用于中大型研发团队,在处理复杂的研发项目时使用,项目越复杂、周期越长、需求越动荡,参与者越会感受到这个工作模式的魅力与威力,前往感受经典的魅力!

图1 Git Flow工作模式

提示:

在使用Git Flow工作模式时,业界普遍遵循的规则:

  • 所有开发分支从develop分支拉取。
  • 所有hotfix分支从master分支拉取。
  • 所有在master分支上的提交都必须要有标签,方便回滚。
  • 只要有合并到master分支的操作,都需要和develop分支合并,保证同步。
  • master分支和develop分支是主要分支,都是唯一的,其它派生分支每个类型可以同时存在多个。

4. GitHub Flow—探寻敏捷之道

随着软件行业竞争日益激烈,能更快更早的为用户提供新产品特性,俨然成为各企业渴望的核心竞争力之一,敏捷文化随之而生。

当项目经理们在学习、推进敏捷改革时,开发者们也在寻求更简洁的代码托管模式,此时“GitHub Flow”进入了开发者的视线,它上手简单,却非常适配敏捷开发环境,在中小型研发项目中,用“GitHub Flow”刚刚好。

它通常有一个主分支master,随时保持可部署状态,每个新特性或新特性集单独拉一条特性分支,例如feature_1/2/3...,在开发完成后直接在特性分支上进行测试,测试通过的特性分支经过分支合并评审(Merge Request,简称MR)后合并回 master 分支,此模式可以保证 master 分支随时都是可部署状态。

可见,“GitHub Flow”是以DevOps持续交付为中心的工作模式,使用“GitHub Flow”的团队在实际开发中甚至有一天之内会实施几十次部署的,而支撑这一切的,就是这个足够简洁的工作模式以及华为DevCloud的CodeHub服务、自动化流水线服务。

图2 GitHub Flow工作模式

提示:

在使用GitHub Flow工作模式时,业界普遍遵循的规则:

  • 让master分支总是保持可以部署的状态。
  • 进行新特性或新特性集开发时要从master分支创建新的分支,新分支名称要具有描述性。
  • 新特性分支的Commit一般在本地仓库进行,当需要合并回master分支时,推送到远程仓。
  • 新特性分支合并回master分支前需要进行测试、评审与充分的交流,要确保合并后的master分支可用且经测试。
  • 与master分支合并后,即可立即部署,使线上版本符合预期。

5. Trunk Based—归本固源

Git提供了分支这一开发策略后,各种基于分支的代码管理策略就如同雨后春笋般,纷纷被创造出来以应对各样的研发场景,如前文介绍到的适用于大型项目的Git Flow、适用于敏捷开发的GitHub Flow。

那么如果我是个人开发者,亦或者我们是两三人的小微团队,有没有适合我的Git工作模式呢?

当然有,它叫“Trunk Based”,与GitHub-Flow相同,它只有一条长期分支,叫做Trunk或者master即为主干,开发人员之间通过约定直接向被指定为主干的分支提交代码。“Trunk Based”是一种极简的开发模式,它主张一切开发活动都直接在主干分支完成,彻底根除了分支合并冲突的烦恼,并且项目中不会再有那些“你也说不上是干嘛的”分支存在了。因此在个人项目中,这该是最主流的开发模式了。

可以说“Trunk Based”回归了版本控制工具最本源的功能,很好理解也很好上手,对于项目的新进成员,导师不再需要培训复杂的分支定义,只需要告诉新来的“写好的代码记得Commit一下”。

当“Trunk Based”模式中项目需要发布版本时,可以单独拉出一条release分支,也可以直接在主干上发布。

没有了分支的代码隔离,测试和解决冲突都变得简单,同时也鼓励了项目成员进行更加频繁的代码集成和交互。

图3 Trunk Based工作模式

提示:

在DevOps环境中,为了保证正在部署的代码不会被Commit,请灵活使用“锁”,更多了解请前往华为云CodeHub锁定代码仓库功能

点击关注,第一时间了解华为云新鲜技术~

云小课|3种常用Git工作流推荐的更多相关文章

  1. 云小课|MRS基础原理之MapReduce介绍

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:MapReduce ...

  2. 云小课|云小课教您如何选择Redis实例类型

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:购买Redis实例 ...

  3. 云小课|MRS数据分析-通过Spark Streaming作业消费Kafka数据

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:Spark Str ...

  4. 云小课|DGC数据开发之基础入门篇

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:欢迎来到DGC数据 ...

  5. 四种常见 Git 工作流比较

    BY 童仲毅(geeeeeeeeek@github) 这是一篇在原文(BY atlassian)基础上演绎的译文.除非另行注明,页面上所有内容采用知识共享-署名(CC BY 2.5 AU)协议共享. ...

  6. 云小课 | 搬迁本地数据至OBS,多种方式任你选

    摘要:搬迁本地数据至OBS,包括OBS工具方式.CDM方式.DES磁盘方式.DES Teleport方式和云专线方式,每种方式特点不同,本节课我们就一起看看有什么区别. 已有的业务数据可能保存在本地的 ...

  7. 云小课|带你揭开IP地址的神秘身份

    摘要:本文带你了解网络云产品和相关的知识内容. 华为云网络服务大家族提供了丰富的云产品,可以满足用户的各种网络互联需求.相应地,华为云帮助中心也贴心的奉上了你想了解的所有网络云产品知识. 可是小课最近 ...

  8. 云小课 | IPv4枯了,IPv6来了

    摘要:本篇主要分享IPv4与IPv6的区别和IPv6的应用场景,助您快速理解华为云IPv6双栈及IPv6 EIP. IPv6的由来 上节课我们讲了公网IP与私网IP,了解了IP地址的一些知识. 我们一 ...

  9. 云小课 | WAF反爬虫“三板斧”:轻松应对网站恶意爬虫

    描述:反爬虫是一个复杂的过程,针对爬虫常见的行为特征,WAF反爬虫三板斧——Robot检测(识别User-Agent).网站反爬虫(检查浏览器合法性)和CC攻击防护(限制访问频率)可以全方位帮您解决业 ...

  10. 云小课 | 需求任务还未分解,该咋整!项目管理Scrum项目工作分解的心酸谁能知?

    温馨提醒:本文约3000字,需要阅读5分钟,共分为8个部分,建议分段阅读! 软件开发过程中,从产品概念形成到产品规划.往往要做详细的需求分析和项目规划等,因此,选对一款项目管理工具对开发者就显得尤为重 ...

随机推荐

  1. Spring Cloud OpenFeign系列:简介和使用

    目录 一.简介 二.使用 1.创建父工程 2.创建order-service模块 3.创建order-client模块 三.效果 四.配置说明 1.超时配置 全局超时配置 局部超时配置 2.Gzip压 ...

  2. 周藤 CSP-2023游记

    Day -inf~Day -2 基本上是考试状态,每天我都是自己取随机题目做,不过也保证了落实量 每场模拟赛发挥基本上是不是特别稳定,考得好的时候AK了,考不好的时候只有300分,反正同届差不多第一吧 ...

  3. 鸿蒙极速入门(六)-加载请求状态管理-LoadState+观察者模式

    背景 1.在ArkTS的架构中,没有明确的可管理的加载请求状态的脚手架,在进行网络请求过程中,无法简单的进行交互响应. 2.参考Android中的LoadState写了一个简单的脚手架,以便在日常开发 ...

  4. MVC(JSP+JavaBean+Servlet)入门实例:用户登陆验证

    一.JSP.JavaBean.Servlet的区别 1.JSP:JSP通过在标准的HTML页面中嵌入Java代码,其静态的部分无效Java程序控制,只有那些需要从数据库读取或需要动态生成的页面内容,才 ...

  5. JAVA多线程(2)——锁(对象锁和类锁)

    1.如下代码 1 public class TestSync1 implements Runnable { 2 Timer1 timer = new Timer1(); 3 public static ...

  6. 免费领取Python学习资料

    话不多说,直接上Python学习资料 QQ·群: 894692354(不单独一一发了,要的人太多,实在忙不过来)

  7. decltype关键词

    简述 decltype 是 C++11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导. decltype 是"declare type"的缩写,译 ...

  8. DP:三角形的最小路径和

    给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [     [2],    [3,4],   [6,5,7],  [4,1,8,3]] 自顶向下的 ...

  9. ConfigureAwait in .NET8

    ConfigureAwait in .NET8 ConfigureAwait(true) 和 ConfigureAwait(false) 首先,让我们回顾一下原版 ConfigureAwait 的语义 ...

  10. 自定义springboot-starter 动态数据源

    自定义springboot-starter 动态数据源 如果使用的是spring或springboot框架,spring提供了一个实现动态数据源的一个抽象类AbstractRoutingDataSou ...