分支及名词
develop分支
一般情况下,普通开发分支(最前沿的分支)都是dev分支,在这上面进行小功能开发、bug修复后合并、大功能合并等等
master分支
也可以交release分支,是正式版本,不允许在这个分支上进行任何的修改、提交操作,只允许通过工具或者脚本进行合并、tag、release、hotfix等操作
feature分支
这个一般情况下是模块、大功能开发,为了不影响到dev分支,每个开发人员单独拉取一个分支进行开发,然后测试无误后,和dev进行合并
这个原理在hotfix以及release经常被用到
hotfix
通常叫做:打补丁。除了bug之后,在dev上面进行修改,然后在master checkout出来一个hotfix版本号的分支,将dev的commit id进行合并(这里可能出现错误,因为dev已经走很远了),解决错误,发布demo环境测试,没问题之后,合并master,灰度(或者小型蓝绿)发布正式环境
release
这个过程和hotfix有点接近,但是是直接在dev上面合并到master,测试无误进行发布版本和tags
Git flow工具
安装
OS X
brew install git-flow
Linux
apt-get install git-flow
Windows
使用shell小工具
wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
使用
初始化: git flow init
开始新Feature: git flow feature start MYFEATURE
Publish一个Feature(也就是push到远程): git flow feature publish MYFEATURE
获取Publish的Feature: git flow feature pull origin MYFEATURE
完成一个Feature: git flow feature finish MYFEATURE
开始一个Release: git flow release start RELEASE [BASE]
Publish一个Release: git flow release publish RELEASE
发布Release: git flow release finish RELEASE
别忘了git push --tags
开始一个Hotfix: git flow hotfix start VERSION [BASENAME]
发布一个Hotfix: git flow hotfix finish VERSION
maven与gitflow结合
首先引入工具:
<plugin>
<groupId>external.atlassian.jgitflow</groupId>
<artifactId>jgitflow-maven-plugin</artifactId>
<version>1.0-m5.1</version>
</plugin>
hotfix
dev上修复bug之后,提交,然后获取提交的commitID,例如:1f8b31bc477cfff7ef18880a9855f56ae1106625
git checkout master
git pull
## 这里先用git log查看一下之前的hotfix是什么版本号,然后下面写这次hotfix的版本号,比如上一次是0.52.5, 那这次定0.52.6
mvn jgitflow:hotfix-start -DautoVersionSubmodules=true -DreleaseVersion=0.52.6
—hotfix branch
## 这里可以执行多次cherry-pick,相当于打多个提交的补丁,如果代码有依赖,必须按照提交的顺序来cherry-pick
git cherry-pick 1f8b31bc477cfff7ef18880a9855f56ae1106625
mvn jgitflow:hotfix-finish -DnoHotfixBuild=true -DconsistentProjectVersions=true
git push
git checkout master
git push
git push —tags
如图:
release
git checkout master
git pull
## 这里先用git log查看一下之前的release是什么版本号, 这里会直接改掉pom中相关项目的version
mvn jgitflow:release-start -DautoVersionSubmodules=true -DreleaseVersion=<version>
mvn jgitflow:release-finish -DnoReleaseBuild=true
git push
git checkout master
git push
git push —tags
tags
最后push --tags直接打一个版本标签,这样会记录所有发布过的版本和补丁,方便统计和回滚,如下图:
结束语
博主团队定下的版本号
1.1.111
即:超大版本号.release版本号.hotfix版本号