前端开发-Gitflow简易版

Simple Gitflow

业务越来越复杂,分支也越来越多,为提高效率和规避流程错误,商定一个统一的工作流程是至关重要的。

先上图~

gitflow-simple.png

分支

Master

  • 它是一个长期分支,存在于整个项目周期。

  • master分支上不允许任何代码提交,只能由负责人进行分支合并。

  • 该分支存放的应该是随时可供在生产环境中部署的代码。

Feature

  • 临时分支,用于开发新功能,不同业务可创建多个feature分支。
  • master分支创建,开发测试完成,合并至release分支后删除。

Release

  • 临时分支,用于预发布或回归测试。
  • master分支创建,发布后打tag合并至master后删除。
  • 命名建议:release/1.x.x

Hotfix

  • 临时分支,用于修复线上问题。
  • master分支创建,发布后打tag合并至master后删除。
  • 命名建议:hotfix/bugName

为什么没有develop分支?

develop分支的职责已经分配到了featurehotfix分支,这样临时分支的修改也不用同步到两个分支(develop和master),为避免混淆,所以移除了develop分支。

场景1:多个feature并行开发

假设5月收到需求,我们要做群密聊,计划6月上线,并且在群密聊上线前,有个0528优化版本要上。

好了,场景有了,来看看具体流程怎么操作。

  1. 创建feature分支

master分支分别创建feature/groupSChat、feature/me0528,命名最好贴合业务。

git checkout master
git branch feature/groupSChat
git branch feature/me0528

分支建好后,就进入开发和测试阶段;在经历N次提交和测试后准备上线。

  1. 创建release分支

假设5月份版本是5.5.5 ,从master分支创建release/5.5.5分支,然后合并feature/me0528分支。

// 从master分支创建release/5.5.5分支并切换到该分支
git checkout master
git checkout -b release/5.5.5
git merge feature/me0528
git branch -d feature/me0528
  1. 打包上线-5.5.5版本

release/5.5.5分支进行最终测试后上线,我们打上tag并合并到master,然后删除release/5.5.5分支。

git checkout master
git merge release/5.5.5
git tag v5.5.5
git branch -d release/5.5.5

注意,到现在虽然5.5.5版本上线了,隔壁分支feature/groupSChat还在紧张开发中,但它丝毫没有受到影响。

  1. 群密聊feature,在经过N次提交和测试后,准备上线

假设群密聊版本是6.0.0,master分支创建release/6.0.0分支,然后合并feature/groupSChat分支。

git checkout master
git checkout -b release/6.0.0
git merge feature/groupSChat
git branch -d feature/groupSChat
  1. 打包上线-6.0.0版本

release/6.0.0分支进行最终测试后上线,我们打上tag并合并到master,然后删除release/6.0.0分支。

git checkout master
git merge release/6.0.0
git tag v6.0.0
git branch -d release/6.0.0

到这里,我们并行开发的两个feature都上线了;开发过程中我们创建的feature、release等分支,也随发版后删除了,仓库里只是多了两个tag标签。

场景2:紧急修复线上bug

假设在场景1中,刚开始做feature/me0528和feature/groupSChat功能不久,就发现线上版本有严重问题,领导要求马上修复后上线。这时你可能会想,我已经有两个分支在开发了,该咋办呢?别担心,你还有master分支,它存放着可供在生产环境中部署的代码。

  1. 创建hotfix分支

假设这个严重问题是导致通讯录用不了,contact not work ?

git checkout master
git branch hotfix/contactNotWork
  1. 打包上线-5.5.1版本
git checkout master
git merge hotfix/contactNotWork
git tag v5.5.1
git branch -d hotfix/contactNotWork
  • 首先,这里假设线上版本为5.5.0,bug修复后发版为5.5.1
  • 与feature分支不同的是,hotfix分支的代码基于稳定的功能,测试完毕后不需要通过release分支即可发布上线。

小结

  • 除了master分支,其它都是临时分支,仓库中只有master分支和正在开发的feature分支,便于维护。
  • 临时分支都是从master分支创建的
  • feature分支通过测试后才创建并合并到release分支。
  • 通过创建release分支,能有效避免丢失已上线的功能或bug修复代码。
  • 场景中分支合并示例使用的git merge,当然你也可以用git rebase,关于二者的区别可参考文末链接。

Thanks

关于本文的由来,首先要感谢 骐彰同学提供的思路,和现有团队的支持,才促使我整理了这篇文章,感谢。

  • Pro Git 2nd Edition
  • git-flow
  • Git-分支-分支的新建与合并
  • Git-分支-变基

你可能感兴趣的:(前端开发-Gitflow简易版)