Git Flow(九)

9.Flow

Git Flow 是一种基于 Git 的分支模型,旨在通过标准化的分支命名和工作流程,使软件的开发、测试和发布过程更加有序高效。

Git Flow 主要由以下几类分支组成:master​、develop​、feature​、release​、hotfix

一、Git Flow 安装

平台 安装命令
Debian/Ubuntu sudo apt install-y git-flow
Windows (Git for Windows) Git for Windows 已包含 Git Flow,使用 Git Bash 即可

验证安装:

git flow version

二、Git Flow 分支模型

分支类型 命名规范 说明
master master 永远保持稳定、可发布的状态。每次发布新版本时,从 develop 合并至此。
develop develop 集成所有开发分支,代表最新开发进度。功能、发布、修复分支均从此分出,最终合并回来。
feature feature/feature-name 用于开发新功能。从 develop​ 创建,完成后合并回 develop
release release/release-name 用于准备新版本发布。从 develop​ 创建,进行最终测试和修复,完成后合并回 develop​ 和 master,并打上版本标签。
hotfix hotfix/hotfix-name 用于修复紧急问题。从 master​ 创建,修复完成后合并回 master​ 和 develop,并打上版本标签。

分支操作原理图(文字描述)

  • master 上每个提交应打标签。
  • develop​ 基于 master 创建。
  • feature​ 完成后合并回 develop,通常删除该分支。
  • release​ 基于 develop​ 创建,发布后合并回 master​ 和 develop,并打标签。
  • hotfix​ 基于 master​ 创建,完成后合并回 master​ 和 develop,并打标签。

三、Git Flow 常用命令

1. 初始化项目

git flow init

根据提示设置分支命名规则和默认分支。

2. 功能分支(Feature)

# 开始一个新功能
git flow feature start MYFEATURE

# 完成功能(自动合并回 develop 并删除功能分支)
git flow feature finish MYFEATURE

3. 发布分支(Release)

# 开始一个发布(可指定基础提交 BASE)
git flow release start RELEASE [BASE]

# 完成发布(自动合并到 master 和 develop,打标签,删除发布分支)
git flow release finish RELEASE

4. 修复分支(Hotfix)

# 开始一个紧急修复(可指定基础提交 BASE)
git flow hotfix start HOTFIX [BASE]

# 完成修复(自动合并到 master 和 develop,打标签,删除修复分支)
git flow hotfix finish HOTFIX

四、实例

# 1. 初始化 Git Flow
git flow init

# 2. 创建并完成功能分支
git flow feature start new-feature
# ... 开发新功能 ...
git flow feature finish new-feature

# 3. 创建并完成发布分支
git flow release start v1.0.0
# ... 测试与修复 ...
git flow release finish v1.0.0

# 4. 创建并完成修复分支
git flow hotfix start hotfix-1.0.1
# ... 修复紧急问题 ...
git flow hotfix finish hotfix-1.0.1

五、优点与缺点

1.优点

  • 明确的分支模型:清晰的分支命名和使用规则,使开发井然有序。
  • 隔离开发与发布:开发和发布过程分离,减少开发中的不确定性对发布的影响。
  • 版本管理:每次发布和修复都会打上版本标签,方便回溯和管理。

2.缺点

  • 复杂性:对于小型团队或简单项目,分支模型可能显得过于复杂。
  • 频繁合并:在大型团队中,频繁的分支合并可能导致合并冲突增加。

六、总结

Git Flow 是一种结构化的分支管理模型,通过定义明确的分支和工作流程,帮助团队更好地管理软件开发和发布过程。虽然它增加了一定的复杂性,但对于大型项目和团队协作,Git Flow 提供了强大的支持和管理能力。