Git flow 出自 A successful Git branching model,这里使用了一个前端项目配合本文稿实施了 git flow 并记录流程作出示例和参考,对 hotfix 与持续部署略有提及,本意是用作公司内部的技术安利。
所用源码及文档本身见于 github jusfr/HelloGitflow

前言

Gitflow 是一种 git 分支管理工具——说是思想也不为过,它使用既定策略区分和管理开发、测试、生产环境的代码版本,对测试与持续集成友好,与敏捷、迭代的思路一致。

1 准备工作

1.1 创建空白目录

mkdir HelloGitflow
cd HelloGitflow

1.2 开始当前目录工作,示例创建和保存一个 index.html

<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title></title> </head> <body> <div></div> </body> </html>

git add index.html
git commit -m "init commit"

2 Git flow init

git flow init

这里使用了默认配置,一路 next

3 一个完整的开发周期

3.1 任务拆解,示例添加了分支 about 和 navigation

git flow feature start about
git flow feature start navigation

任务拆解相当于 story 认领,实际开发中的步骤更加繁冗。

3.2.1 about 分支创建了一个 about.html

git checkout feature/about
# more work to do
git add about.html
git commit -m "add about.html"

3.2.2 navigation 分支创建了一个 nav.html

git checkout feature/navigation
# more work to do
git add nav.html
git commit -m "add nav.html"

3.3 开始合并分支

3.3.1 合并 about

git flow feature finish about

3.3.2 合并 navigation,存在 merge 过程

git flow feature finish navigation

3.4 版本发布

3.4.1 当 feature 积累数量达到可以进行版本发布时,开始进行 release 发布

git flow release start v0.1

3.4.2 部分内容需要修改,在这里为各页面添加了 title

git add index.html about.html nav.html
git commit -m "add title for each page"

3.4.3 结束当前 release 分支

# git push
git flow release finish v0.1

4 连续的开发周期

我们开始在远程分支上工作,可以在结束分支前先将其 push 到远程分支上避免未在本地保留的情况

git remote add github https://github.com/jusfr/HelloGitflow.git
git push github --all

虽然开出来很多分支,但是可以观察到 master 和合并了两次,且分别被标记为 v0.1 和 v0.2

不考虑测试等情况,标记 v0.1 和 v0.2 的 master 版本或者 release/v0.1 和 release/v0.2 都是可以部署的版本。

5 线上的 bug 修复

现在已经在 v0.2 基础上进行 account 和 react 的分支开发,但是发现线上的 v0.2 版本需要立即修复的问题,分支状态

开启 hotfix/v0.2.1 来修复这个问题

bash git flow hotfix start v0.2.1

在 hotfix/v0.2.1 的视角来看,它是从最近的 mater 分支checkout 下来的,所以对正在进行的 account 和 react 无影响

以全局视角来看,hotfix/v0.2.1 与 account 和 react 确实没有交集

现在问题修复,合并 hotfix/v0.2.1

bash git flow hotfix finish 'v0.2.1'

当然仍然可以先 push 到远程分支,可以看到进行了若干步操作

  1. 合并 hotfix/v0.2.1 到 master 分支,master 分支被打上 v0.2.1 的 tag
  2. 合并 master 到 develop 分支。

在第2步中,如果 develop 有过变更,比如有过 feature 合并,那么可能存在冲突需要解决

在此示例中, master 分别被打上了 v0.1, v0.2, v0.2.1 标记,这对基于 master 的持续部署非常友好:可以快速在这些版本中部署与回滚,而不用关心存在多少变更与分支等等。

从一个前端项目实践 Git flow 的流程与参考相关推荐

  1. 如何交接(接手)一个前端项目

    2018年入职某公司,接手一大哥的前端项目,几乎无任何交接文档,催也不给,无奈之下只好当面沟通交流,前后问了很多问题,导致双方又累又不开心. 后来风水轮流转,2020年的时候,他来接手我的一个前端项目 ...

  2. 如何将spring源码作为导入eclipse中,变成一个普通的项目(git、github)

    引子: 怎么查看spring-framework的源码?是不是用压缩软件解压jar包,然后用编辑软件看?高端一点的,是在eclipse上面,按住Ctrl键跳转着看?这里我给大家介绍更加高端一点的方法. ...

  3. Vue 搭建一个前端项目

    一.前言 之前图省事,都是在html中引入Vue.js的CDN来使用Vue开发网站项目,其实正确的做法应该是使用Vue构建一个完整的项目,进而进行前后端分离的开发. 二.让我们开始吧! 1 node环 ...

  4. Git Flow 工作流程

    引言 编写的目的 -通过规范化的流程,使得产品.开发与测试等各个部门更高效的协同工作. -通过规范化的流程使得产品高效稳定运行. 背景 在多组员,多项目等环境进行协同工作时,如果没有统一规范.统一流程 ...

  5. 如何开始做一个开源项目?他的亲身经历值得参考

    (点击上方公众号,可快速关注) 英文:Vincent Voyer,翻译:Linux爱好者 - nEoYe [导读]:作者 Vincent Voyer 用亲身经历鼓励大家从事开源活动:他在 Nodejs ...

  6. 创建一个vue-cli项目到运行的完整流程

    创建一个新的vue项目进行开发的完整流程 安装vue 安装vue-cli 创建一个项目 修改babel.config.js 预处理器 安装 Sass 安装Less 安装stylus 在项目中.vue文 ...

  7. 【jQuery】前端项目实践案例1——使用jQuery制作Tab选项卡点击切换效果

    1.实现效果: 案例描述:当用户单击不同的导航时,与其对应的内容回相应的呈现. 案例要求:使用jquery制作实现tab选项卡单击切换效果. 2.实现思路: (1)div+css布局,制作选项卡和对应 ...

  8. vue项目运行启动方法(从github上下载了一个前端项目进行运行)

    1.从GitHub上下载完整的项目压缩包并解压到没有中文目录的路径下. 2.安装node: 官网地址  https://nodejs.org/en/ 按照 https://www.cnblogs.co ...

  9. 【jQuery】前端项目实践案例6——制作产品放大镜效果(仿京东淘宝图片效果)

    使用jQuery制作产品放大镜效果实现效果: 使用jQuery制作产品放大镜效果实现原理: 通过设置图像的 CSS 属性( left 和 top ),来实现图像的移动. 使用jQuery制作产品放大镜 ...

最新文章

  1. 杨老师课堂之JavaScript定时器限时抢购秒杀商品案例
  2. 如何用命令隐藏文件夹
  3. 数据挖掘之关联分析七(非频繁模式)
  4. go中如何使用easyjson_两分钟让你明白Go中如何继承
  5. oracle数据块dump信息,从数据块的dump信息能看出什么
  6. java 获取泛型_聊聊Java泛型擦除那些事
  7. MSSQL Server 2008 功能
  8. 通过Spring Boot中的手动Bean定义提高启动性能
  9. 只因少写一个判空,我的代码上线后炸了!
  10. 如何让 Linux 下非 root 用户程序使用小于 1024 端口
  11. sdk的安装与环境配置
  12. linux mint 下安装 wwscan
  13. Babylongjs-动画
  14. 12月年末总结与新年期望
  15. Android waitting for debugger
  16. C++设计模式(全23种)
  17. 4、(四)外汇学习基础篇之银行间外汇远期交易
  18. ios越狱,impactor无法使用的替代方案
  19. u盘UEFI模式安装Windows10和ubuntu18.04双系统
  20. 【Android】时钟动态图标的定制化

热门文章

  1. 大叔手记(17):大叔2011年读过的书及2012年即将要读的书
  2. 记录一次提交开源JAR包到中央仓库的过程
  3. MyBatis传入参数与parameterType
  4. 只遍历出JScript对象的expando属性
  5. python 学习之FAQ:find 与 find_all 使用
  6. itop修改附件上传大小限制
  7. 字符串工具类、数组工具类、集合工具类、转型操作工具类、编码与解码操作工具类...
  8. oracle 11g 的em启动不了
  9. Mac下python初学之Image库(PIL)
  10. 分析文件上传过程中的HTTP头部