GitFlow 代码管理模型实战
一 概述
Git Flow定义了一个项目发布的分支模型,为管理具有预定发布周期的大型项目提供了一个健壮的框架。
master分支存放所有正式发布的版本,可以作为项目历史版本记录分支,不直接提交代码。仅用于保持一个对应线上运行代码的 code base。
develop分支为主开发分支,不直接提交代码。
feature分支为新功能分支,feature分支都是基于develop创建的,开发完成后会合并到develop分支上。同时存在多个。
release分支基于最新develop分支创建,当新功能足够发布一个新版本(或者接近新版本发布的截止日期),从develop分支创建一个release分支作为新版本的起点,用于测试,所有的测试bug在这个分支改。测试完成后合并到master并打上版本号,同时也合并到develop,更新最新开发分支。(一旦打了release分支之后不要从develop分支上合并新的改动到release分支),同一时间只有1个,生命周期很短,只是为了发布。
hotfix分支基于master分支创建,对线上版本的bug进行修复,完成后直接合并到master分支和develop分支,如果当前还有新功能release分支,也同步到release分支上。同一时间只有1个,生命周期较短。
简化的流程图:
二 操作步骤
2.1 克隆远程仓库到本地
git clone http://mrivandu@127.0.0.2:8888/demo/GitFlow.gitgit config credential.helper store # 记住密码,后续提交无需再次输入密码。
2.2 配置提交用户信息
进入仓库所在目录,配置用户信息。用户信息包括用户名及邮箱,如果是全局配置,加上–global选项。
git config user.name "mrivandu"git config user.email "mrivandu@"
2.3 develop 分支
develop 分支与 master 分支如下图:
git add .git commit -m "init"git branch develop mastergit push -u origin develop
2.4 feature 分支
提交流程如图:
通过develop新建feaeure分支
git checkout -b feature develop
feature 分支可以只存在本地仓库,也可以推送至远程服仓库:
git push -u origin feature
在本地仓库修改相关文件:
git statusgit add .git commit -m "modify"
完成 feature 分支的开发后,合并到 develop 分支
git pull origin developgit checkout develop#--no-ff:不使用fast-forward方式合并,保留分支的commit历史#--squash:使用squash方式合并,把多次分支commit历史压缩为一次git merge --no-ff featuregit push origin develop
feature 分支合并到 develop 后,删除本地分支(也可以保留不删除):
git branch -d some-feature
如需删除远程feature分支:
git push origin --delete feature
2.5 release 分支
提交流程如图:
检出 release 分支:
git checkout -b release-0.1.0 develop
完成 release 分支的开发,合并回 master 分支和 develop 分支:
git checkout mastergit merge --no-ff release-0.1.0git pushgit checkout developgit merge --no-ff release-0.1.0git push
删除本地 release 分支(亦可保留):
git branch -d release-0.1.0
删除远程仓库 release 分支(亦可保留):
git push origin --delete release-0.1.0
合并 master/devlop 分支之后,打 tag:
git tag -a v0.1.0 master -m "demo version"git push --tags
2.6 hotfix 分支
提交流程如图:
完成 hotfix 分支,合并至 master 分支:
git checkout -b hotfix-0.1.1 mastergit checkout mastergit merge --no-ff hotfix-0.1.1git push
完成 hotfix 分支,合并至 develop 分支:
git checkout developgit merge --no-ff hotfix-0.1.1git push
删除 hotfix 分支:
git branch -d hotfix-0.1.1git push origin --delete hotfix-0.1.1 # 如果本地已向 远程仓库推送,可以使用该命令删除远程 hotfix 分支
完成 hotfix,打 tag:
git tag -a v0.1.1 mastergit push --tags# 删除本地 tag: git tag -d v0.1.1# 删除远程 tag:git push origin :refs/tags/v0.1.1