内容简介:关于
git flow
源自这篇文章 a-successful-git-branching-model ,大神!!!。
关于 git flow
的使用,请看以下链接,非常多的文章,写的非常好。
git-branching-model 如图
git flow
常用的分支
以下部分内容来自 如何正确的使用git flow 博客和gitflow-examples
develop release/* master hotfix/*
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 flow
的 release
流程只是把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 flow
和 standard-version
搭配使用
请务必在熟悉 git flow
的基础上集成使用 standard-version
,因为两个 工具 的使用不当,会造成冲突。
git flow
流程中 standard-version
使用
standard-version
的作用就是生成 changelog
更新 package.json
和 package.lock.json
中的 version
字段。所以它在 git flow
中使用受 git flow
的流程限制。 目前我的经验是只能在 git flow
的 release/*
和 hotfix/*
分支中使用。 因为只有这两个分支涉及到发版流程,而 changelog
只有在发版时刻才生成。
git flow
和 standard-version
冲突的tag功能
git flow
和 standard-version
在使用的过程中,都有自动打 tag
的功能,但是两者都支持跳过 tag
阶段,所以这也是这两个工具冲突的地方,建议从两者中 选取其一 。
-
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
运行时机
- release 分支流程中运行
git flow
在 release finish
阶段是把 release/*
分支合并到 master
和 develop
,所以 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" 复制代码
- hotfix分支流程中运行
hotfix finish
阶段和 release
非常像是把 hotfix/*
分支合并到 master
和 develop
, 但是是否在 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-version
在 git flow
不同流程阶段注意的问题
-
standard-version
在release
流程中注意事项:-
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中的 )- 如果有更好的方法请告诉我 ~):
-
-
standard-version
在hotfix
流程中注意事项:-
hotfix
中生成changelog- release分支在
hotfix finish
之前建立 ,会出现在release分支一样的问题
- release分支在
-
hotfix
分支不生成changelog- release分支在hotfix finish 之前建立 ,会造成
hotfix
修复的的日志无法出现在changelog中
- release分支在hotfix finish 之前建立 ,会造成
解决方法:
release 分支包含
hotfix
内容(release 分支在hotfix之后创建,或者hotfix提取成patch,在release分支上apply) -
-
standard-version
不带参数使用# 如果直接在分支上,使用 standard-version 复制代码
如果不指定参数直接使用
standard-version
命令,standard-version
会自动分析commit message
类型,如果包含patch就累加patch,有feat就自动累加minor,有break change
就自动生成 major版本号, 风险较大,建议指定参数 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 前端小纠结--WebSocket实战
- 前端小纠结--VS Code调试配置分享
- 前端小纠结--约定式提交和自动生成`changelog`
- 前端小纠结--IE11下SVG元素默认focusable=true
- 悟懂 MapReduce,不纠结
- 为什么你还在纠结于语法糖?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。