git flow 概念
- Git作为一个代码管理系统,不可避免的会涉及到多人协作。
- 俗话说无规矩不成方圆。Git Flow 就是如何使用git 分支的一种规范,或者叫做推荐。简单来说就是通过规范化的流程,使得产品、开发与测试等各个部门更高效的协同工作。
git flow 主要分支
-
根据Git Flow 的规范,我们要将Git 的分支分为 master 、develop 、hotfix 、release、feature这五个分支。
-
存在两个长期分支
- 主分支 master
- 开发分支 develop
-
三种短期分支
- 功能分支 feature
- 补丁分支 hotfix
- 预发分支 release
-
我们使用的分支流程:
-天蓝色圆点所在的线为我们源码的主线(master)。
-紫色圆点所在的线为主要分支线(develop)。
-橙色圆点所在的线为新功能开发分支线(feature)。
-绿色圆点所在的线为新版本发布线(release)。
-红色圆点所在的线为发布版本bug修复线(hotfix)。
-
主要功能
- master 分支:用于存放对外发布的版本,任何时候在这个分支获取到的都是稳定的已发布的版本。
- develop分支 :用于日常开发,存放最新的开发版
- feature分支 :可以存在多个,他是基于develop分支被创建,一般根据所需开发的功能来命名分支,每一个新的功能可以创建一个新的分支,开发结束后,需要将其合并到develop上
- hotfix 分支:hotfix 分支用来修复生产中的紧急bug,由于develop分支尚处于开发过程中,代码不稳定,不能直接应用于生产。
- release 分支:release 分支可以称之为预发布的版本。当我们认为develop版本的代码已经趋于成熟,我们可以打一个release分支。在release 分支上测试完成之后,要将代码合并到master分支和develop上。master 分支是线上版本,而合并到develop版本是因为,在测试过程中,一些细节的东西可能会修改,因此这些优化的内容也应该合并到最终版本以及开发版本中。
-
注意事项:
- 所有开发分支从 develop 分支拉。
- 只要有合并到 master 分支的操作,都需要和 develop 分支合并下,保证同步。
- master 和 develop 分支是主要分支,主要分支每种类型只能有一个,派生分支每个类型可以同时存在多个。
常用操作流程(新功能开发工作流)
- 切换到本地仓库工作区
cd /home/timerhunter/workspace
- 从远程仓库克隆代码到本地仓库
$git clone https://xxxx@localhost:8443/r/valve/V5-Lora.$git
- 基于master分支,创建develop分支
/*切换到master分支 */
$git checkout master
/* 基于master分支克隆develop分支,并在克隆完毕后直接跳转到develop分支 */
$git checkout -b develop
/* 推送develop分支到远程仓库 */
$git push origin develop
- 在本地仓库的开发流程
完成一个功能点或者一天的工作结束时,将代码提交到本地仓库
/* 提交修改到缓冲区 */
$git add .
/* 提交修改到本地仓库 */
/* 如果是修复的BUG,应该在修改说明的最开始添加Bug#ID,多个Bug用逗号分 隔,例如Bug#002,003 */
/*如果是完成了一个指派的任务 应该在修改说明的最开始添加Task#TaskID,例如Task#165 */
$git commit -m "Bug#123 修改说明"
/* 每完成一个功能点可以对代码进行打包 */
$git tag -m "简要说明增加/修复/删除了什么功能" v0.0.0.170718
- 推送代码到远程仓库
当完成一个功能点或阶段工作时,将代码推送到远程仓库develop分支
/* 执行代码拉取操作,防止代码冲突 */
$git pull
/* 解决代码冲突后,推送代码到远程仓库*/
$git push origin develop
- 将代码发布到测试分支
阶段性的开发工作已完成,启动小批量测试工作,将代码发布到测试分支release
$git checkout develop
$git checkout -b release
$git push origin release
- 测试工程师提交Bug后修复
- 从远程仓库拉取代码
/* 克隆仓库 */
$git clone https://[email protected]:8443/r/admin/test.$git
/* 查看远程仓库分支情况:克隆仓库时只能克隆master分支,因此需要拉取指定分支,我们使用$git branch -r查看远程分支情况 */
$git branch -r
origin/HEAD -> origin/master
origin/dev
origin/master
origin/release
/* 拉取测试分支 */
$git checkout -b release origin/release
- 修复流程同#4,#5;
- 注意在$git commit时的修复说明中添加Bug#BugID关键字
- 完成一个Bug修复或完成阶段性工作后,将代码推送到远程分支
- 测试工作完成后,合并代码到develop分支
/* 切换到develop分支 */
$git checkout develop
/* 执行合并操作,将release分支代码合并到develop分支 */
$git merge release
/* 如果合并报错,则解决冲突,冲突解决后继续再次执行合并 */
- 开发工作和测试工作都完毕后,发布时将develop分支合并到主线
$git checkout master
$git merge develop
- 阶段开发完毕,打一个里程碑Tag包
/* 创建里程碑Tag */
$git tag -m "Task#003 v1.0.0 首版发布" v1.0.0.170718
/* 推送里程碑Tag到远程仓库 */
$git push origin v1.0.0.170718