Git Flow 简介

随着 GitHub 的流行,越来越多人开始使用 GitGit 的强大在于我们可以随时随地的创建分支。

随时随地创建分支,给我带来了极大的方便,但同时,分支太多管理起来也是非常头疼。

Git 支持多人协作,如果没有一个规范的话,随着时间的变化,将会越来越难以管理。

这时 Git Flow 出现了,这个分支模型,为我们管理 Git 分支提供了一个模型,用来管理 Git 分支,有效的减少分支混乱不堪的情况。

Git Flow 安装

Git Flow 的安装非常简单,根据自己的操作系统选择对应的安装指令执行之后就安装好了。

Linux

1
sudo pacman -S --noconfirm gitflow-avh

macOS

1
brew install git-flow-avh

初始化

安装好 Git Flow 之后,在需要使用的项目中用 git flow init 进行初始化,不然是没法使用 Git Flow 的功能的。 初始化的指令如下

1
git flow init

Git Flow 分支模型

Git Flow 中有许多分支,我们先来看一下各个分支的作用

master 分支

master 分支上存放的是生产环境的代码,我们不应该在 master 上进行开发,也不要直接把改动提交到 master。

master 分支是一个长期存在的分支,是经过测试的稳定代码。

develop 分支

develop 分支是我们开发的基础分支,新的功能都是从 develop 检出的,也是一个长期存在的分支。

feature 分支

功能性分支,基于 develop 分支检出的,在功能开发完成后合并到 develop 并删除,属于临时性分支。这是一个开发经常打交道的分支。

新建 feature 分支的命令如下

1
git flow feature start <feature_name>

新功能开发完毕后,使用如下命令结束新功能的开发

1
git flow feature finish <feature_name>

如果这个新功能是多个人合作开发的,可以使用如下命令推送到远程服务器中

1
2
3
git flow feature publish <feature_name>
# 或者
git push <feature_name>

从远程服务器拉取最新的功能分支可以使用如下命令

1
2
3
git flow feature pull origin <feature_name>
# 或者
git pull <feature_name>

release 分支

release 分支的作用在于,我们的功能都开发完了,可以进行整体性测试的时候从 develop 分支检出,并部署到测试环境,让测试人员在此分支上进行测试,开发在这个分支上对测试测出的 bug 进行修复。

待功能修复完毕,觉得没问题后,部署到预发布环境,或者进行灰度发布,一切都没问题的后,可以合并到 master 和 develop 进行正式上线,部署到生产环境。

我们开发好后,要部署到测试环境可以通过如下命令

1
git flow release start <release_name>

在通过测试后,可以通过如下命令合并到 master 和 develop

1
git flow release finish <release_name>

推送到远程和从远程拉取和 feature 上的操作类似,也是使用 publishpull 这里不再赘述。

hotfix 分支

hotfix 的作用是在生产环境上发现 bug 时,需要进行修复,这时候就会从 master 分支检出,并在上面进行 bug 修复。修复完成后会合并到 master 和 develop 并删除,也是一个临时性分支。

hotfix 和 feature 不同的地方在于,feature 分支是从 develop 检出的,而 hotfix 是从 master 检出的。

当线上有 bug 了,我们要进行修复,这时候需要通过如下指令

1
git flow hotfix start <version_name>

bug 修复完成之后,通过如下指令进行发布新版本

1
git flow hotfix finish <version_name>

在 Emacs 中配置 Git Flow

有了上面的知识做铺垫,使用起来就方便了,我们也知道怎么使用了。

不过在 Emacs 中使用还需要先进行配置一下,在 Emacs 中使用 Git Flow 需要用到 maigt-flow 这个 package ,它的配置如下。

1
2
3
4
5
(use-package magit-gitflow
  :defer t
  :hook(magit-mode . turn-on-magit-gitflow)
  :config
  (define-key magit-mode-map "%" 'magit-gitflow-popup))

配置好后在 maigt-mode 中使用 % 可以调出 Git Flow 的界面,如下所示

Emacs 中使用 Git Flow

初始化

上小节说到在 magit-mode 下使用 % 就能调出 Git Flow 的界面,接下来按下 i 选择初始化 之后按下 i 选择使用默认配置初始化 初始化好后会默认帮我们生成 develop 分支,如果没有的话。

feature

使用 feature 还是通过 % 开启,按下 f 选择 feature 之后按下 s 选择 start 然后再次按下 s 选择 start 在 minibuffer 中输入 feature_name 输入完成后,可以看到当前分支已经切换到了 feature/feature_test 分支 在功能开发完成后,也同样通过 % 调出 Git Flow 菜单,按下 f 选择 feature ,在接下来的菜单中按下 f 选择 Finish 接着再次按下 f 选择 Finish 最后会弹出一个菜单列表,选择我们之前创建的 feature_test

release

release 的操作和 feature 大同小异,这里使用动态图片进行演示

hotfix

hotfix 的操作也是和 featurerelease 一致,这里不再演示,感兴趣的可以自己练练手,尝试尝试。

总结

Git Flow 是一个帮助我们管理 Git 的工具,可以让我们进行更好的使用 Git 协作。

Git Flow 虽然好,但是有点复杂,上手成本比较高,有些小伙伴不喜欢。可以根据实际情况选择是否需要在项目中使用。

参考