敏捷开发下的Git工作流应用实践

article/2025/8/20 1:25:28
 

1 背景

在我们日常工作中,协同开发是最高效的一种方式,尤其是比较大的需求点以及功能,甚至是新项目的开发。这种情况下,Git的使用无可避免的也会出现一些问题。而在计算机技术发展到今天的同时,协同开发工具也不断进步着,向我们熟知的SVN和Git,本身就是成熟的协同开发框架。尤其是GitFlow工作流模式,更是一度被许多公司奉为协同开发的典范并纳入开发规范中。那么,今天就说一下敏捷开发过程中,我们应该使用怎样的工作流模式才能更高效的完成开发工作呢?

2 传统的GitFlow工作流模式

介绍一下GitFlow的工作流模式,心急的小伙伴可以直接跳到->3 我们团队的Git工作流

2.1 常用分支

master:

- 主分支 , 产品的功能全部实现后 , 最终在master分支对外发布;

- 该分支为只读唯一分支 , 只能从其他分支(release/hotfix)合并 , 不能在此分支修改;

- 另外所有在master分支的推送应该打标签做记录,方便追溯;

- 例如release合并到master , 或hotfix合并到master;

develop:

- 主开发分支 , 基于master分支克隆;

- 包含所有要发布到下一个release的代码;

- 该分支为只读唯一分支 , 只能从其他分支合并;

- feature功能分支完成 , 合并到develop(不推送);

- develop拉取release分支 , 提测;

- release/hotfix 分支上线完毕 , 合并到develop并推送;

feature:

- 功能开发分支 , 基于develop分支克隆 , 主要用于新需求新功能的开发;

- 功能开发完毕后合到develop分支(未正式上线之前不推送到远程中央仓库!!!);

- feature分支可同时存在多个 , 用于团队中多个功能同时开发 , 属于临时分支 , 功能完成后可选删除;

release:

- 测试分支 , 基于feature分支合并到develop之后 , 从develop分支克隆;

- 主要用于提交给测试人员进行功能测试 , 测试过程中发现的BUG在本分支进行修复 , 修复完成上线后合并到develop/master分支并推送(完成功能) , 打Tag;

- 属于临时分支 , 功能上线后可选删除;

hotfix:

- 补丁分支 , 基于master分支克隆 , 主要用于对线上的版本进行BUG修复;

- 修复完毕后合并到develop/master分支并推送 , 打Tag;

- 属于临时分支 , 补丁修复上线后可选删除;

- 所有hotfix分支的修改会进入到下一个release;

2.2 GitFlow模式流程介绍

1)初始化项目为GitFlow, 默认创建master分支 , 然后从master拉取第一个develop分支;

2)从develop拉取feature分支进行编码开发(多个开发人员拉取多个feature同时进行并行开发 , 互不影响);

3)feature分支完成后 , 合并到develop(不推送 , feature功能完成还未提测 , 推送后会影响其他功能分支的开发), 合并feature到develop , 可以选择删除当前feature , 也可以不删除 . 但当前feature就不可更改了 , 必须从release分支继续编码修改;

4)从develop拉取release分支进行提测 , 提测过程中在release分支上修改BUG;

5)release分支上线后 , 合并release分支到develop/master并推送,合并之后 , 可选删除当前release分支 , 若不删除 , 则当前release不可修改 . 线上有问题也必须从master拉取hotfix分支进行修改;

6)上线之后若发现线上BUG , 从master拉取hotfix进行BUG修改;

7)hotfix通过测试上线后 , 合并hotfix分支到develop/master并推送。合并之后 , 可选删除当前hostfix , 若不删除 , 则当前hotfix不可修改 , 若补丁未修复 , 需要从master拉取新的hotfix继续修改;

8)当进行一个feature时 , 若develop分支有变动 , 如其他开发人员完成功能并上线 , 则需要将完成的功能合并到自己分支上。即合并develop到当前feature分支;

9)当进行一个release分支时 , 若develop分支有变动 , 如其他开发人员完成功能并上线 , 则需要将完成的功能合并到自己分支上。即合并develop到当前release分支 (!!! 因为当前release分支通过测试后会发布到线上 , 如果不合并最新的develop分支 , 就会发生丢代码的情况)

2.3 GitFlow在当下敏捷开发中的弊端

GitFlow的创始人文森特·德里森在2020年3月5日写下了自己的反思note,他说自己的这个模式太过于久远,而且开发模式从传统开发转型成现在的敏捷开发,这一套流程已经不太适用了,所以请使用者参考自己系统的背景,选择更适合自己的。

2.4 其他现有工作流

那既然GitFlow已经不适合我们敏捷开发了,有没有其他的工作流模式呢?有。

而下面这两种工作流模式就是敏捷开发的优秀实践:

2.4.1 GitHub flow

2.4.2 GitLab Flow

3 我们团队的Git工作流

3.1 分支介绍

master:

- 主分支 , 产品的功能全部实现后 , 最终在master分支对外发布;

- 上线前由dev分支合并到此分支;

dev:

- 除client包之外,和master完全一致,用来做备份以及打rpc的jar包;

- 上线前由feature-rev分支合并到此分支;

uat:

- 灰度发布分支,用于业务上线前验证以及培训使用;

- 由feature-rev分支合并后进行uat灰度发布;

test:

- 测试分支,提测后部署到测试环境,由测试人员进行测试;

- 由feature分支开发完成后合并到此分支进行提测。

feature:

- 功能开发分支 , 基于dev分支克隆 , 主要用于新需求新功能的开发;

- 功能开发完毕后用于提测以及修改bug;

- feature分支可同时存在多个 , 用于团队中多个功能同时开发 , 属于临时分支 , 功能完成后可选删除;

feature-rev:

- 代码评审分支,开发完成后先合并到此分支进行评审,保证此分支都是评审通过的代码,然后从此分支进行向test、uat、dev分支的合并。 属于临时分支 , 功能完成后可选删除。

3.2 我们工作中Git工作流可能存在的问题

1)开发权限未做限制,所有开发者都被允许直接在master上提交代码,需要将分支加以保护;

2)test分支上有大量分支存在,一旦某个分支测试阶段出现重大缺陷需要回滚,无法回滚,这种问题需要主程序员拉齐所有开发人员,删除test分支重新维护;

3)测试直接上test环境进行测试,当其中某一个环节卡住的时候,后续流程都会卡在那里,影响测试效率,这种问题现在只能快速推进问题修复;

4)测试环境不稳定,经常有人修复了bug后正在重启;

5)uat阶段的bug经常只合并到uat,test会被遗漏,导致uat上修改的问题被测试再次提出,甚至有的会很久之后才发现;

6)分支没有删除,导致git分支爆炸;

7)每次上线需要合并好几个分支,每个分支还可能会有一些sql、配置、权限等,容易遗漏。

这些问题目前都是要主程序员做好把控,具体问题具体分析处理的。

3.3 目前可以做的Git工作流优化

1)git分支保护,将master分支保护起来,任何人不得直接提交,包括主程序员以及拥有者,每个项目只给对应的两三个项目负责人合并权限,其余人需要提交merge request进行申请合并。(有些公司test也做了保护,目的是为了提测前强制review)

2)uat阶段的bug必须首先合并到test,在test上经由测试人员验证之后再合并到uat,因为uat毕竟相当于线上分支,一些bug可能会影响到正式数据。(即使出现紧急情况必须马上发uat给业务人员验证,也必须同时合并到test分支)

3)已上线分支由开发人员及时删除。或者统一记录到对应的joyspace上,由主程序员定期删除joyspace记录的过期分支。或者主程序员进行合并到dev分支的时候,在merge request上勾选删除原分支的选项。

4)开发人员维护开发数据库,不直接连接测试数据库,除非排查问题的时候,防止出现sql遗漏问题。

将测试环境的配置也模仿线上提取出的文件进行提取,防止出现配置遗漏的问题。

注:关于此处可能大家有一些疑问,我也只是给出一个建议,这一点并不是git工作流的优化,而是我们工作流程的优化。其实这个问题可以由上线的CheckList解决,而CheckList更加节约成本,对应的缺点就是对开发人员的规范要求更高,并且如果出现各种原因导致的研发变动产生的交接不完整,就会遗漏配置文件或者sql语句。我的想法是如果我们有一套框架或者系统,可以在需求开发完毕,提测的时候,能够上传sql,自动在测试库执行。增加此次维护的配置,可以自动添加到配置文件中(这个自动添加可能会导致乱序,或者改为只做记录我觉得也可),然后自动进行测试环境的编译部署。这样在上线的时候就会有参考,即使交接不完整,也可以在上线时查询到对应需求的配置修改和对应的sql语句。

3.4 Git的一些小技巧

1)merge分支之前,可以将本地未commit但确认修改无误的东西push远端,比如多个分支合并到uat分支的时候,我们可以合并一个验证完成后push,这样另一个分支合并的时候,如果冲突太多,不好解决或者不小心解决错误的时候中止合并并且硬重置,之前的工作量就不会浪费,无法启动的时候也更容易定位是哪个分支导致的。

2)如果修改test环境或者uat环境的bug时,不小心直接在test或者uat分支提交并推送了,不需要再到对应分支修改一遍,这样不仅浪费工作量,而且还容易发生冲突。合适的解决方案是直接将对应的提交cherry-pick到对应的开发分支即可。

3)git命名的时候,可以在命名中,将对应版本(如果团队在执行版本火车的话)、开发者、当前时间增加到这个分支中,形成规范,类似于“songle-20210817-xxxSignStateCheck”,便于后续管理。比如我们的分支名就是“erp-yyyyMMdd-featureName”。

4)如果一条远端分支有多人共用,那么绝对不要在上面执行reset、rebase等会修改这条分支已经存在的commit object的命令。除非你明确知道自己在做什么。

5)如果不小心在dev上开发了一些代码,还没commit,可以直接新建分支或者切回开发分支,这些未commit的修改会一起被带过去,如果切换失败了,可以先stash(贮藏)之后切换分支,然后再弹出贮藏。

4 总言

其实,协同开发的问题大大小小每个团队都有存在。而在协同开发中,既没有“金手指”,也没有“灵丹妙药”。如果想要高效、快速的实践敏捷开发,完成我们的敏捷目标,需要团队中每个人的积极参与,对现有流程查漏补缺,打磨出属于自己团队的工作流及开发规范。只有这样,才能让团队在协同开发中披荆斩棘,真正做到敏捷为生产赋能。


http://chatgpt.dhexx.cn/article/KsYcKDlv.shtml

相关文章

刚进公司,不懂Git工作流的我瑟瑟发抖

前言 不懂git工作流,被辞退了! 之前在看到这句话的时候,我刚实习入职不久,瑟瑟发抖。好巧不巧,今天又看到了类似的文章讲git重要性的。 眼下,学校导师安排给我的课题组了一个新的工程项目,使用g…

团队Git实践方案-Git工作流

在团队协作中,好好地应用 Git可以为团队开发带来更高的效率收益, 也能保证整个工作流的完整推进。本文通过参考多篇优秀的Git实践文章总结而成,旨在为使用GIT标准分支开发流程的开发团队新人提供一份参考指南 一、一些好的习惯 1.1 提交 提…

面试 之 git工作流

目录: 一、git工作流 一、git工作流 1、git 版本管理基本概念 remote远程仓库 repository本地仓库 index索引区 index是新commit的写照;git add已经将数据传递到本地仓库了,在index中有个指向blob对象的索引记录;因此&#…

git工作流学习记录

git工作流学习地址 https://git-scm.com/book/zh/v1/Git-分支-分支的新建与合并 git多人参与开发项目时,需要用到git的工作流 一、创建好仓库 第一个分支是master,这个分支就作为项目最稳定的分支存在 然后是开发分支dev,这个分支是开发过…

用手画了11张图终于搞明白了Git工作流,我怀疑你用的是假 Git

号外号外!《死磕 Java 并发编程》系列连载中,大家可以关注一波: 「死磕 Java 并发编程05」阿里面试失败后,一气之下我图解了Java中18把锁 「死磕 Java 并发编程04」说说Java Atomic 原子类的实现原理 「死磕 Java 并发编程03」…

Git工作流(分支管理规范)

原文链接:https://nvie.com/posts/a-successful-git-branching-model/ Note of reflection (March 5, 2020) 反思记录(2020 年 3 月 5 日) This model was conceived in 2010, now more than 10 years ago, and not very long after Git itself came int…

Git工作流规范

Git基本原理及命令使用 Git简明教程 Git工作流使用方式选择 微型项目,使用集中式工作流。小型项目,功能分支工作流。中大型的互联网项目,不断需求迭代,一个版本接一个版本,参考并使用如下Git工作流。 Git工作流使用…

给大家推荐一套 git 工作流

一套规范的git工作流能让每个开发者都有自己的本地的完整项目副本。隔离的环境使得每个开发都的工作独立于项目的其它修改。 —— 他们可以在自己的本地仓库中添加提交,完全无视上游的开发,直到需要的时候。 一、分支划分及作用 master —— 主分支&…

Git工作流指南

说明: 个人在学习Git工作流的过程中,从原有的 SVN 模式很难完全理解Git的协作模式,直到有一天我看到了下面的文章,好多遗留在心中的困惑迎刃而解: 我们以使用SVN的工作流来使用Git有什么不妥?Git方便的bra…

《Git 系列》Git 工作流,你知道几种?

前言 Git 可能是对我们日常开发影响最大的软件了。 我们使用 Git,肯定要采用某个工作流来作为我们的开发流程。 不同的开发流程,有不同的适用场景, 没有银弹! Workflow - 工作流 Git flowGitHub flowTrunk-based development…

git的各种工作流

Git工作流可以理解为团队成员遵守的一种代码管理方案,在Git中有以下几种常见工作流: 集中式工作流功能开发工作流Gitflow工作流Forking工作流 1)集中式工作流 这种工作方式跟svn类似,它只有一个master分支,开发者会…

Git工作流(随笔)

目录 前言 一、工作流概述 1、概念 2、分类 二、集中式工作流 1、概述 2、介绍 3、操作过程 三、功能分支工作流 1、概述 2、介绍 3、操作过程 1)创建远程分支 2)删除远程分支 四、GitFlow工作流 1、概述 2、介绍 3、操作过程 五、Forki…

git工作流

目录 一、什么是gitFlow工作流二、操作1.(Feature branches)功能分支1.1创建功能分支1.2完成功能分支 2.(Release branches)发布分支3.(Hotfix branches)修复分支 三、例子1、创建develop分支2、张三和罗翔…

Flask+Vue+ElementUI开源框架推荐

项目介绍 一款 Python 语言基于Flask、Vue2.x、ElementUI、MySQL等框架精心打造的一款高性能的前后端分离架构敏捷开发框架,可快速搭建前后端分离后台管理系统,本着简化开发、提升开发效率的初衷,框架自研了一套个性化的图片上传组件&#x…

实用 | 整理了 34 个最火的 Python 开源框架

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达本文转自|视觉算法 我们从近 10000 个 Python 开源框架中评价整理的 34 个最为好用的开源框架,它们细分可以分为 Python Toolkit、Web、Terminal、Code Edito…

Python开源框架简介

前言 今天给大家带来了12个在GitHub等开源网站中最受欢迎的Python开源框架。如果你正在学习python,那么这12个开源框架,千万别错过,这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试&…

推荐 6 个 yyds 的开源 Python Web 框架

提到 Python 的 Web 框架,第一反应就是老三样,Django,Flask 和 Tornado。如果按流行度来排名的话,应该也是这个顺序。 但是今天重点介绍的框架是FastAPI,现在很多公司招聘的要求都需要会这个框架,非常值得…

22个受欢迎的Python不同类型开源框架

阅读网站源代码需要一定的编程基础,但有一些通用步骤可以帮助你理解: 了解编程语言:你需要了解网站源代码使用的编程语言,比如HTML、钢性铸铁和java描述语言。使用开发者工具:你可以使用浏览器 的开发者工具来查看网站…

最受欢迎 Top 12 Python 开源框架,你都用过吗?| 原力计划

作者 | 学Python的阿勇 责编 | 夕颜 出品 | CSDN博客 今天给大家带来了12个在GitHub等开源网站中最受欢迎的Python开源框架。如果你正在学习python,那么这12个开源框架,千万别错过,这些框架包括事件I/O,OLAP,Web开发&a…

python开源web项目-15个最受欢迎的Python开源框架(转载)

一、Django: Python Web应用开发框架 Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的, 即是CMS(内容管理系统)软件。并于2005年7月在B…