Git分支模型(Git Branching Model)
feature develop relese hotfixes master
branchs | branchs | |
| | | | |
| | | | |Tag 0.1
| | | | |
| | | | |Tag 0.2
| | | | |
| | | | |
Git Flow工作流程详解
1. master分支
- 所有在
master
分支上的commit
都应该打tag
- 注意
major
和minor
版本号区分
v0.1 v0.2 v0.3 v1.0
master: • -------→ • --------→ • --------→ • ---- +∞
2. feature分支
- 分支名
feature/*
feature
分支做完后,必须合并develop
分支,且合并完成之后一般会删除这个feature
分支
v0.1 v0.2 v0.3 v1.0
master: • -------→ • --------→ • --------→ • ---- +∞
| ↑
↓ |
develop: • -------→ • --------→ • --------→ • ---- +∞
| | ↑ ↑
| ↓ | |
feature: | • --------→ • |
| |
↓ |
feature: • -------→ • --------→ • --------→ •
3. release分支
- 分支名
release/(版本号)
release
分支是基于develop
分支创建的,打完release
分支之后,我们可以在这个release
分支上进行测试,修改bug等.- 同时,其他开发人员可以基于此,去开发新的
feature
分支. - 原则是:
- 打了
release
分支之后,不要再从develop
分支上合并新的改动到release
分支. - 如果是合并到
master
分支,记得打个tag
记住relese
版本号,然后可以删除这个分支了
v0.1 v0.2 v0.3 v1.0
master: • -------→ • --------→ • --------→ • ---- +∞
| ↑?
release: | • --------→ •
↓ ↑ ↓?
develop: • -------→ • --------→ • --------→ • ---- +∞
| | ↑ ↑
| ↓ | |
feature: | • --------→ • |
| |
↓ |
feature: • -------→ • --------→ • --------→ •
4. hotfix分支
- 分支名
hotfix/*
hotfix
分支基于master
分支创建,开发完后需要合并回master
和develop
分支,同时在master
上打一个tag
v0.1 v0.2 v0.3 v1.0
master: • -------→ • --------→ • --------→ • ---- +∞
| ↓ ↑ ↑
| • --------→ • |
| | |?
release: | | • --------→ •
↓ ↓ ↑ ↓?
develop: • -------→ • --------→ • --------→ • ---- +∞
| | ↑ ↑
| ↓ | |
feature: | • --------→ • |
| |
↓ |
feature: • -------→ • --------→ • --------→ •
5. support分支
Git Flow
没有真正涵盖support
分支,但是如果需要同时维护多个主要版本,则是必不可少的.- 同时,也可以使用
support
分支来支持minor
版本. - 如果只是支持major,命名
support/<major>.x
,minor版本为support/<major>.<minor>.x
GIt Flow工具使用
客户端工具
windows
和mac
:sourcetree
客户端,内置Git Flow
流程.windows
:git bash
(git for windows)中内置了gitflow-scripts
.linux
:内置giflow-scripts
.
npm工具standard-version
作用
- 作用:1.生成
changelog
2.更新package.json
和package.lock.json
中的version
字段. - changelog只在发版本的时候生成.
注意:Git Flow
和standard-version
tag功能的冲突.
-
Git Flow
和standard-version
在使用的过程中,都有自动打tag
的功能.但是两者都支持跳过tag
阶段. -
建议两者任选其一:
-
跳过standard-version打tag
-
方法一:
package.json
{
"standard-version": {
"skip": {
"tag": true
}
}
}
- 方法二:
command line
standard-version -r mirror --skip.tag
- 跳过git flow打tag
command line
git flow release finish v0.2.0 -n -m "chore(release): 0.2.0"
运行时机
- 场景1: release分支流程中的运行
# 1. release开始阶段
git flow release start v0.2.0
# 2. commit并附带message,可以使用git cz替代
git commit -m 'fix(src): 修复问题'
# 3. (可选) 如果需要在release/* 分支上,生成beta测试阶段的changelog
npx standard-version -p beta
# 4. standard-version不打tag,使用git flow的tag功能
npx standard-version -r v0.2.0
# 5. release结束阶段
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"
- 场景2: hotfix分支流程中运行
# 1. hotfix开始阶段
git flow hotfix start v0.2.1
# 2. commit并附带message,可以使用git cz替代
git commit -m 'fix(src): 修复问题'
# 3. standard-version不打tag,使用git flow的tag功能
npx standard-version -r v0.2.1
# 为了防止版本号冲突我们可以使用patch自增版本号
# npx standard-version -r patch
# 4. hotfix结束阶段
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不同流程阶段注意的问题
- 在
release
流程中注意事项:- 原则: 在Git Flow流程中
release
应该在hotfix
之后创建: - 场景:
release
在hotfix
之前创建 &hotfix
中生成changlog &release
中生成beta
版的changelog. - 问题:
- 如果在创建
release
分支之后,出现并修复hotfix
并生成了changelog. - 那么
hotfix finish
之后release finish
就会造成release
合并到master
和develop
时出现冲突.
- 如果在创建
- 解决:
- 原理: 使
release
分支包含hotfix
内容 - 方案1:
release
分支在hotfix
之后创建. - 方案2:
hotfix
提取成patch
,在release
分支上apply.
- 原理: 使
- 原则: 在Git Flow流程中
- 在
hotfix
流程中注意事项:- 场景1:
hotfix
中生成changelog - 注意: 如果
release
分支在hotfix finish
之前建立,会出现release
分支一样的问题 - 场景2:
hotfix
中不生成changelog - 注意: 如果
release
分支在hotfix finish
之前建立,会造成hotfix
修复的日志无法出现在changelog中 - 解决:
- 原理: 使
release
分支包含hotfix
内容 - 方案1:
release
分支在hotfix
之后创建. - 方案2:
hotfix
提取成patch
,在release
分支上apply
.
- 原理: 使
- 场景1:
- standard-version不带参数使用:
- 如果不指定参数直接使用
standard-version
命令,standard-version
会自动分析commit message
类型. commit message
中,如果包含:patch
就累加path
,- 有
feat
就自动累加minor
, - 有
break change
就自动生成major
版本号.
- 风险较大建议指定参数.
- 如果不指定参数直接使用
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!