前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 git-flow 自动化你的 git 工作流

使用 git-flow 自动化你的 git 工作流

作者头像
savokiss
发布2019-11-25 13:03:11
8490
发布2019-11-25 13:03:11
举报
文章被收录于专栏:码力全开码力全开

介绍一下

git flow 分支模型相信大家或多或少都听过,先放张图镇楼:

上面的图看不懂没关系(我也不懂==),今天讲的是根据这个分支模型开发的 git-flow 命令行工具。只需要记住几个简单的命令,就能在工作中慢慢理解和应用这个分支模型~

安装 git-flow

我们选择比较流行的 avh 版本 gitflow-avh

下面以 Mac OS X 为例,安装命令:

$ brew install git-flow-avh

初始化 Git 仓库

下面针对一个只有 README.md 的文件夹执行以下命令,有条件的小伙伴可以跟着操作一下,加深记忆。

$ git flow init
Initialized empty Git repository in /Users/savokiss/demos/gitflow/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master]
Branch name for "next release" development: [develop]

How to name your supporting branch prefixes?
Feature branches? [feature/]
Bugfix branches? [bugfix/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? [] v
Hooks and filters directory? [/Users/savokiss/demos/gitflow/.git/hooks]

可以看到 git flow init 命令会要求你选择两个主分支,以及多个功能分支的前缀,我们都使用默认值,而版本号 Tag 前缀使用 v

需要说明的是,git-flow 其实只是一系列 git 命令的组合,init 命令除了会新建分支,不会做其他额外的操作。所以如果以后你不再使用 git-flow,也不需要做任何变更。

注意上面的 init 操作完成,会自动帮我们切到 develop 分支

Feature 功能分支

假设我们需要新建一个功能分支 auth 来做登录功能的开发。让我们先切到 master 分支:

$ git checkout master

然后开始新的功能分支,控制台输出如下:

$ git flow feature start auth
Switched to a new branch 'feature/auth'

Summary of actions:
- A new branch 'feature/auth' was created, based on 'develop'
- You are now on branch 'feature/auth'

Now, start committing on your feature. When done, use:

     git flow feature finish auth

可以看到我们是在 master 分支上执行的命令,但是 feature/auth 分支却是基于 develop 切出的,因为根据上面的分支模型,所有的功能分支都应该从 develop 分支切出。这也就是 git-flow 的好处,你可以不用在意当前所在的分支,它会自动帮你保证没有切错分支~

接下来我们来修改一下 README.md,添加一句话 登录功能已经完成!,然后提交。

然后再执行完成命令,控制台输出如下:

$ git flow feature finish auth
Switched to branch 'develop'
Updating e69b22c..f7f48e2
Fast-forward
 # gitflow | 0
 README.md | 4 ++++
 2 files changed, 4 insertions(+)
 create mode 100644 # gitflow
 create mode 100644 README.md
Deleted branch feature/auth (was f7f48e2).

Summary of actions:
- The feature branch 'feature/auth' was merged into 'develop'
- Feature branch 'feature/auth' has been locally deleted
- You are now on branch 'develop'

从输出可以看出:

  1. feature/auth 分支被合并到了 develop 分支中。
  2. feature/auth 分支被删除了
  3. 自动切换到了 develop 分支

而在 1 中 git-flow 内部使用如下命令 git merge --no-ff feature/auth 来进行合并,关于 --no-ff 参数,简单来说,可以更好地保留 feature 历史记录,感兴趣的小伙伴可以自行查阅相关资料哈

Release 版本发布

通常情况下,我们会使用基于 semver 的语义化版本规范来管理软件发布。

git-flow 也支持创建 release 分支。下面我们来发布一个 0.1.0 版本:

$ git flow release start 0.1.0
Switched to a new branch 'release/0.1.0'

Summary of actions:
- A new branch 'release/0.1.0' was created, based on 'develop'
- You are now on branch 'release/0.1.0'

Follow-up actions:
- Bump the version number now!
- Start committing last-minute fixes in preparing your release
- When done, run:

     git flow release finish '0.1.0'

可以看出,该命令自动基于 develop 切出了 release/0.1.0 分支。 然后提示你在此分支上进行如下操作:

  1. 修改软件版本号
  2. 进行针对此版本的 bug 修复

在正常的开发流程中,提测后的 bug 修复阶段就可以在这个 release/0.1.0 分支上做,然后等测试通过后,就可以标记版本发布完成:

$ git flow release finish 0.1.0
Switched to branch 'master'
Switched to branch 'develop'
Already up to date!
Merge made by the 'recursive' strategy.
Deleted branch release/0.1.0 (was f7f48e2).

Summary of actions:
- Release branch 'release/0.1.0' has been merged into 'master'
- The release was tagged 'v0.1.0'
- Release tag 'v0.1.0' has been back-merged into 'develop'
- Release branch 'release/0.1.0' has been locally deleted
- You are now on branch 'develop'

可以看到,当你 finish 了一个 releasegit-flow 内部执行了以下操作:

  1. release/0.1.0 分支被合并到 masterdevelop
  2. v0.1.0 标签被打在 master
  3. release/0.1.0 分支被删除
  4. 当前切换到了 develop 分支

Hotfix 生产热修复

由于 master 分支一直反映了线上生产环境的状况,所以如果要进行生产热修复,就需要从 master 分支切出,下面假如我们线上的 banner 有一个 bug:

$ git flow hotfix start banner
Switched to a new branch 'hotfix/banner'

Summary of actions:
- A new branch 'hotfix/banner' was created, based on 'master'
- You are now on branch 'hotfix/banner'

Follow-up actions:
- Start committing your hot fixes
- Bump the version number now!
- When done, run:

     git flow hotfix finish 'banner'

上面可以看出,从 master 切出了一个 hotfix/banner 分支, 接下来你可以在该分支进行生产 bug 修复的提交以及版本号的变更。

需要注意的是:hotfix 分支和 release 分支比较像,唯一的区别是 hotfix 分支是基于 master 切出的。

我们先修改一下 README.md 文件并提交,然后完成 bug 修复:

$ git flow hotfix finish banner
Switched to branch 'develop'
Deleted branch hotfix/banner (was c6da343).

Summary of actions:
- Hotfix branch 'hotfix/banner' has been merged into 'master'
- The hotfix was tagged 'vbanner'
- Hotfix tag 'vbanner' has been back-merged into 'develop'
- Hotfix branch 'hotfix/banner' has been locally deleted
- You are now on branch 'develop'

上面完成了:

  1. hotfix/banner 分支被合并到 masterdevelop
  2. 这个热更新被自动打上标签 vbanner(由于我们前面设置标签前缀为 v)
  3. hotfix/banner 分支被删除
  4. 目前切换到分支 develop

由于我没有关联远端 origin,所以这里只会提示本地分支被删除,如果关联后远端分支也会被删除。

完了

上面我们体验了 git-flow 的基本操作流程。为了方便演示,我是基于一个空项目操作的,实际上也可以针对一个开发了很久的 git 仓库来进行 git flow init,它会让你选择已经存在的分支作为 生产分支开发分支 以及输入相应的前缀,其余不会做任何多余的操作。

另外 Sourcetree 是一个好用免费的 Git 图形化客户端,同时支持 WindowsMac,并且内置了 git-flow 工具,感兴趣的小伙伴也可以尝试一下~

如果想了解更多,可以参见文末的链接,其中有个 cheatsheet 也可以快速熟悉 git flow 命令。

相信有了 git-flow 这个工具,在做分支管理的时候可以相对无痛一点~

参考链接

  • git-flow avh 版
  • semver 语义化版本规范
  • Using git-flow to automate your git branching workflow
  • git-flow 工作流程
  • git-flow cheatsheet 中文版
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码力全开 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍一下
  • 安装 git-flow
  • 初始化 Git 仓库
  • Feature 功能分支
  • Release 版本发布
  • Hotfix 生产热修复
  • 完了
  • 参考链接
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档