请看上一篇前端小纠结--约定式提交和自动生成changelog

git flow工作流对比

Git工作流指南

git flow 介绍

git flow源自这篇文章a-successful-git-branching-model,大神!!!。

关于git flow的使用,请看以下链接,非常多的文章,写的非常好。

如何正确的使用git flow

git-flow 备忘清单

git-branching-model 如图

git flow常用的分支

以下部分内容来自如何正确的使用git flow博客和gitflow-examples

  • develop : 这个分支是我们是我们的主开发分支,包含所有要发布到下一个Release的代码,这个主要合并与其他分支,比如Feature分支
  • release/* : 当你需要一个发布一个新Release的时候,我们基于Develop分支创建一个Release分支,完成Release后,我们合并到Master和Develop分支
  • master : 也就是我们经常使用的Master分支,这个分支最近发布到生产环境的代码,最近发布的Release, 这个分支只能从其他分支合并,不能在这个分支直接修改
  • hotfix/* 当我们在生产环境(master)发现新的Bug时候,我们需要创建一个Hotfix, 完成Hotfix后,我们合并回Master和Develop分支,所以Hotfix的改动会进入下一个Release
  • feature/* : 这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回Develop分支进入下一个Release

git Flow如何工作

所有在Master分支上的Commit应该Tag

feature分支

分支名 feature/*

Feature分支做完后,必须合并回Develop分支, 合并完分支后一般会删点这个Feature分支

release分支

分支名 release/*

Release分支基于Develop分支创建,打完Release分之后,我们可以在这个Release分支上测试,修改Bug等。同时,其它开发人员可以基于开发新的Feature (记住:一旦打了Release分支之后不要从Develop分支上合并新的改动到Release分支)

发布Release分支时,合并Release到Master和Develop, 同时在Master分支上打个Tag记住Release版本号,然后可以删除Release分支了。

minor版本发布

major版本发布

hotfix分支

分支名 hotfix/*

hotfix分支基于Master分支创建,开发完后需要合并回Master和Develop分支,同时在Master上打一个tag

hotfix修复分支

support分支

GitFlow没有真正涵盖support分支,如果需要同时维护多个主要版本,则必不可少。 您也可以使用support分支来支持minor版本。 如果您只是支持major,命名support/<major>.x,minor版本为support/<major>.<minor>.x

多版本hotfix修复

多版本的release

多版本的git flowrelease流程只是把master替换为需要维护的分支。

git flow工具的使用

windows和mac建议使用sourcetree客户端,内置了git flow流程,具体的使用方法,请自行搜索.

当然windows下的git for windows(git bash中)也内置了gitflow-scripts,请参考升级版git-flow-completion完成自动补全功能

如果使用linux,内置了gitflow-scripts(不知道是那个版本),很不负责任的建议使用升级版gitflow-avh.

关于使用git flow工具使用可以参考如何正确使用Git Flow这篇博客文章

上图是sourcetree中git flow的菜单

git flowstandard-version搭配使用

请务必在熟悉git flow的基础上集成使用standard-version,因为两个工具的使用不当,会造成冲突。

git flow流程中standard-version使用

standard-version的作用就是生成changelog更新package.jsonpackage.lock.json中的version字段。所以它在git flow中使用受git flow的流程限制。 目前我的经验是只能在git flowrelease/*hotfix/*分支中使用。 因为只有这两个分支涉及到发版流程,而changelog只有在发版时刻才生成。

git flowstandard-version冲突的tag功能

git flowstandard-version在使用的过程中,都有自动打tag的功能,但是两者都支持跳过tag阶段,所以这也是这两个工具冲突的地方,建议从两者中选取其一

强烈推荐 standard-version 自动 tag,不推荐使用git flow的tag功能

使用git flow自动tag必须保证tag格式standard-version能够识别,standard-version使用git-semver-tags解析tag,参考git-semver-tags支持的格式

如果standard-version识别tag出现遗漏,会造成生成的changelog内容重复。 standard-version默认的tag前缀是v

  • standard-version跳过tag方法

    // 方法一: package.json添加配置
    {"standard-version": {"skip": {"tag": true}}
    }
    复制代码
    # 方法二:命令行中添加参数
    standard-version -r minor --skip.tag
    复制代码
  • git flow跳过tag的方法

    # 跳过tag,并且可以自定义commit message(为了让commit message符合约定提交的格式规范)
    git flow release finish v0.2.0 -n -m "chore(release): 0.2.0"
    复制代码

standard-version运行时机

  1. release 分支流程中运行

git flowrelease finish阶段是把release/*分支合并到masterdevelop,所以standard-version就是要在finish结束之前运行生成changelog.

# 1. 模拟一个release流程
git flow release start v0.2.0# 2. 做一些修改或者commit
git commit -m 'fix(src): 修复问题'# 3. (可选)如果需要在release/* 分支生成beta测试阶段的changelog
npx standard-version -p beta# 4. release finish 之前
# standard-version不打tag,使用git flow的tag功能
npx standard-version -r v0.2.0# 5. 正式发布release,自定义commit message为了符合约定式提交的格式
git flow release finish v0.2.0 -m "chore(release): 0.2.0"# 如果你使用了standard-version的tag功能,git flow应该跳过tag
# git flow release finish v0.2.0 -n -m "chore(release): 0.2.0"
复制代码
  1. hotfix分支流程中运行

hotfix finish阶段和release非常像是把hotfix/*分支合并到masterdevelop但是是否在hotfix分支生成changelog还需要自行决定(有冲突的风险

# 1. 模拟一个hotfix流程
git flow hotfix start v0.2.1# 2. 做一些修改或者commit
git commit -m 'fix(src): 修复问题'# 3. finish finish 之前
# standard-version不打tag,使用git flow的tag功能
npx standard-version -r v0.2.1
# patch版本号可以使用 patch 替代
# npx standard-version -r patch# 正式发布hotfix,自定义commit message为了符合约定式提交的格式
git flow hotfix finish v0.2.1 -m "chore(release): 0.2.1"# 如果你使用了standard-version的tag功能,git flow应该跳过tag
# git flow hotfix finish v0.2.0 -n -m "chore(release): 0.2.1"
复制代码

standard-versiongit flow不同流程阶段注意的问题

  1. standard-versionrelease流程中注意事项:

    • release中生成beta版本的changelog

      前置条件:

      • release 在hotfix之前创建
      • hotfix中生成changelog
      • release中生成beta版的changelog

      release分支的创建时机很重要,git flow流程中release在hotfix之后创建

      如果创建release分支之后,出现并修复hotfix并且在hotfix生成changelog,hotfix finish之后release finish就会造成release合并到master和develop时出现冲突.

      解决方案:

      release 分支包含hotfix内容(release 分支在hotfix之后创建,或者hotfix提取成patch,在release分支上apply)(git flow流程中hotfix是包含在next release中的

      • 如果有更好的方法请告诉我 ~):
  2. standard-versionhotfix流程中注意事项:

    • hotfix中生成changelog

      • release分支在hotfix finish 之前建立,会出现在release分支一样的问题
    • hotfix分支不生成changelog

      • release分支在hotfix finish 之前建立,会造成hotfix修复的的日志无法出现在changelog中

    解决方法:

    release 分支包含hotfix内容(release 分支在hotfix之后创建,或者hotfix提取成patch,在release分支上apply)

  3. standard-version不带参数使用

    # 如果直接在分支上,使用
    standard-version
    复制代码

    如果不指定参数直接使用standard-version命令,standard-version会自动分析commit message类型,如果包含patch就累加patch,有feat就自动累加minor,有break change就自动生成 major版本号,风险较大,建议指定参数

建议

工具和流程模型都是根据使用场景,灵活多变的,所以不要局限于工具和流程模型,实践出适合自己的流程模型才是最重要的。

参考

a-successful-git-branching-model

原版git flow scripts弃坑状态不建议使用

原版git-flow-completion

升级版gitflow-avh

升级版git-flow-completion

约定式提交规范

git-flow 备忘清单

git-flow-standard-version

git-flow-conventional-commits

如何正确使用Git Flow

git rebase保持代码树整洁

集中式工作流

功能分支工作流

Gitflow工作流

Forking工作流

comparing-workflows gitflow-examples

前端小纠结--集成gitflow和standard-version使用相关推荐

  1. 小程序集成网易云通信群聊功能Demo发布

    前端代码是可以直接使用的,获取后端代码加微信13439975582 功能实现说明: 1.小程序生命周期完美整合 2.消息小红点,群聊小红点代码实现都实现了 3.历史信息回放 4.小程序帐号集成 代码都 ...

  2. 微信小程序集成jenkins自动打码

    微信小程序集成jenkins自动打码 背景 一.miniprogram-ci工具 概述 详细介绍见官网 二.工具准备内容 三.注意事项 四.开始 安装miniprogram-ci 运行CI命令 出现以 ...

  3. 两个月入门深度学习,全靠动手实践!一位前端小哥的经验分享

    两个月入门深度学习,全靠动手实践!一位前端小哥的经验分享   在当前社会,技术日新月异,一个全栈工程师不及时学习新知识,掌握AI技能,再过两年就算不上"全栈"了. 产品发烧友.前端 ...

  4. SAP成都研究院大卫哥:SAP C4C中国本地化之微信小程序集成

    今天的文章来自Wu David,SAP成都研究院C4C开发团队的架构师,在加入团队之前曾经在SAP上海研究院工作,组内同事习惯亲切地称呼他为大卫哥. 大卫哥身高据Jerry目测有1米8以上,是成都C4 ...

  5. 一个在校的普通前端小姐姐的2021

    大家好,我是若川.这是我的源码共读群里一个大三的前端小姐姐(小曹同学)的年度总结.她写了5篇源码笔记.同时做了很多项目,获得了很多奖.而且策划和建立了学校工作室的前端训练营,40+人报名参加.总之就是 ...

  6. 两个相邻盒子的边框怎么只显示一个_【前端小课堂】0044 盒子

    这是一个面向零基础的前端教程,很简单,用零散时间就可以学习. 推荐早上读一下,晚上复习一下,如果可以奢侈一点,白天稍微练习一下下,总共花费 5~15 分钟.就酱! 已经好几次提到块(block)元素了 ...

  7. 微信小程序订票选座PHP后台网站MySQL数据库和无前端小程序版本两个程序

    微信小程序订票选座PHP后台网站MySQL数据库和无前端小程 下载点此去 两个相同功能 差别在一个有前端微信小程序 一个没有 (1)登录功能:注册普通账号登录:也可以直接使用微信登录:登录后可以修改用 ...

  8. nginx 前端小图标配置

    nginx 前端小图标配置 cat /etc/nginx/conf.d/tg-t1.conf server { listen 8099; server_name localhost; location ...

  9. 支付宝小程序集成MQTT

    支付宝小程序集成MQTT 1. 前言 ​ 由于支付宝只支持websocket连接,在尝试了很多npm安装mqtt亦或是使用paho-mqtt.js.重新编译过后的mqtt.js多方无果后,最终决定自己 ...

最新文章

  1. 深度丨当AI变得无处不在,人类社会将发生这五大变化!
  2. 如何搭建AIoT智能对话交互系统:技术解析和实操分享
  3. 大数据互联网架构阶段 全文检索技术
  4. TESTb需要向至少十几家应用商店提交上线审核,且每个应用商店要求的资料可能都不一样,异常繁琐
  5. go设计模式之装饰器模式
  6. linux uuid挂载磁盘_Linux磁盘设备磁盘设备的UUID标识代码(sda,sdb,sdc…)变化的解决办法...
  7. 牛腩新闻发布系统错误总结
  8. 基于ffmpeg+SDL的加密视频播放器的开发(一)
  9. 使用matlab的appdesigner绘制Steward并联机构
  10. 智能时尚:人工智能在时尚服装行业的应用综述 | 580+参考文献
  11. 基于mysql 批量插入100w测试数据
  12. MySQL 数据库设计范式/优化
  13. Springcloud的版本依赖问题(最全,包含springCloud所有的版本)
  14. 终于解决了PADS,Altium,ORCAD的相互转换问题
  15. 【转】告诉你外语学习的真实方法及误区分析(精编版)-part 1
  16. C语言通过ODBC函数操作Access数据库(mdb和accdb格式)
  17. 瑞友天翼虚拟化系统7.0 瑞友天翼远程接入
  18. 如何不碌碌无为的活着?
  19. Git 中 tag 的用法(打tag、删除tag等)
  20. java 中文怎么截取_Java截取字符串的函数且保证中文截取正常

热门文章

  1. Redis 的性能幻想与残酷现实(转)
  2. 解决 MSChart控件 X轴坐标显示不全的问题
  3. win7系统启动到一半停止_win7系统启动一半死机的解决方法
  4. python3 random函数_Python3 中 random模块
  5. 系统策略禁止安装python_Win10系统如何禁止自动安装捆绑软件?
  6. matlab图像融合评价,MATLAB 图像融合评估算法
  7. java二期_Java架构师鲁班二期
  8. 机器运算知识点计算机组成原理,计算机组成原理考研知识点非常全
  9. python画有权重网络图_python networkx 根据图的权重画图实现
  10. 如何格式化电脑_U盘提示格式化后如何恢复数据