13.Git工作流

26 阅读5分钟

工作流

1.介绍

Git工作流,即Git工作流程,也称GitFlow。它定义了一套清晰的分支管理策略(一个项目该有几个分支,什么分支该干什么功能),旨在为开发团队提供一个结构化的分支模型和工作流程,实现高效的团队协作和版本控制。它通过定义明确的分支类型和开发流程,使软件开发过程更加有序、可控

简言之,Git工作流就是帮助我们定义了一套标准的开发流程,这套开发流程中规定了如何建立、合并分支,如何发布,如何维护历史版本等一套行为规范,使得产品、开发与测试等各个部门更高效地协同工作。使用这套工作流程能够使我们开发项目变得结构清晰、易管理

核心:分支管理,发布模型

2.核心优势

1769770987538.png

3.常见分支类型

1755781616722.png

4.方案总览

  • 集中式工作流
  • 功能分支工作流
  • GitHubFlow
  • GitFlow

5.集中式工作流

介绍

概念来源于SVN等传统版本控制系统,所有修改都提交到Master分支

工作流程

1755791406055.png

1769771262843.png

应用场景

比较适合极小团队或单人维护的项目

优缺点

  • 优点:逻辑简单直接,没有复杂的协作流程
  • 缺点:频繁同步,缺乏并行开发能力,无法进行功能隔离

6.功能分支工作流

介绍

功能开发应该在一个专门的分支,而不是在master分支上

工作流程

1755791452132.png

1769771353029.png

应用场景

适合中小型团队

7.GitHubFlow

介绍

随着敏捷开发和DevOps的兴起,团队开始追求更快的交付速度,GitHubFlow在这个背景下孕育而生,它在功能分支工作流基础上做了极简化处理

核心理念是main分支永远保持可部署状态

工作流程

1769771519057.png

8.GitFlow

介绍

公司中最常用于管理大型项目。为功能开发、发布准备和维护设立了独立的分支,让发布迭代过程更流畅

分支含义

1769771796926.png

1769792416567.png

1769792432591.png

1769792452912.png

1769792468527.png

1769792498101.png

人员与分支关系

1769771981409.png

工作流程

1769771620073.png

1755791502700.png

1769771885991.png

FigureP39373543.jpg

  1. 在master分支建立develop分支,用于后续开发任务使用
  2. 在develop分支建立feature-01分支进行功能开发
  3. 开发完毕后将功能发布到develop分支,随后将该feature分支删除
  4. 建立release分支,在release分支上做bug测试
  5. 测试完毕后发布到master分支并打上标签
  6. 将release分支上的功能再发布到develop分支,随后将该release分支删除
  7. v1.2功能使用了一段时间后,当发现有一些问题需要修复/优化时,将v1.2发布到hotfix分支,进行问题修复
  8. 修复/优化完成后发布到master分支并打上标签
  9. 将hotfix分支上的功能再发布到develop分支,随后将该hotfix分支删除

模拟开发过程

初始化项目并建立develop分支
# 初始化
git init
echo "init" >> init.txt
git commit -m "init" ./
# 打上v1.0标签
git tag v1.0 -m "v1.0-项目初始化"
# 创建develop分支
git branch develop
# 查看日志
git log --oneline --all --graph
建立feature分支,进行功能开发
# 创建login功能分支,并切换到feature-login分支
git branch feature-login
git switch feature-login
# 开发登录功能
echo "QQ-login" >> login.txt
git add ./
git commit -m "QQ-login" ./
# 查看日志
git log --oneline --all --graph
开发完毕后合并到develop分支,随后删除feature分支
# 切换到develop分支
git switch develop
# 将login功能合并到develop分支
git merge feature-login
# 删除feature-login分支
git branch -d feature-login
# 查看日志
git log --oneline --all --graph
将develop分支的功能发布release分支,进行功能测试
# 创建release-login分支并切换
git branch release-login
git switch release-login
# 进行功能测试
echo "QQ-login-test" >> login.txt
git commit -m "QQ-login-test" ./
# 查看日志
git log --oneline --all --graph
测试完毕后发布到master分支并打上标签作为一个稳定版本
# 切换到master分支
git switch master
# 将release-login分支合并到master(禁用快速合并,产生一个的新的commit)
git merge --no-ff release-login
# 打tag为v.1
git tag v1.2 -m "v1.2-QQ登录功能开发完成"
# 查看日志
git log --oneline --all --graph
将release分支的功能再发布到develop分支,随后删除release分支
# 切换到develop分支
git switch develop
# develop分支合并release-login分支
git merge --no-ff release-login
# 删除release-login分支
git branch -d release-login
# 查看日志
git log --oneline --all --graph
对v1.2版本进行优化,将v1.2版本发布hotfix分支,做功能优化
# 在v1.2版本这个位置上创建分支并切换
git branch hotfix-login v.12
git switch hotfix-login v.12
# 优化功能/修复bug
echo "QQ-login-optimize" >> login.txt
# 查看日志
git log --oneline --all --graph
优化完毕后发布到master分支并打上标签
# 切换到master分支
git switch master
# 合并hotfix-login分支
git merge --no-ff hotfix-login
# 打tag,v1.4
git tag v1.4 -m "v1.4-优化了QQ登录功能"
# 查看日志
git log --oneline --all --graph
将hotfix分支的功能再发布到develop分支,随后删除hotfix分支
# 切换到develop分支
git switch develop
# 合并hotfix-login分支
git merge --no-ff hotfix-login
# 删除hotfix-login分支
git branch -d hotfix-login
# 查看日志
git log --oneline --all --graph

GitFlow Script

暂时省略

9.总结与对比

1769771657076.png

10.分支合并策略

1769794961297.png

1769795122565.png

  1. 功能分支开发完成后,首先rebase主干上的变更到自己的功能分支,然后在功能分支上解决冲突
  2. 将功能分支merge squash到主干
  3. 删除功能分支