关山难越,谁悲失路之人;萍水相逢,尽是他乡之客。
百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程教程 > 技术文章 > 正文

git的三种代码版本分支模型对比

guanshanw 2023-09-30 14:04 37 浏览 0 评论

现在市面主流的git版本管理模式有三个:git flow,github flow,gitlab flow。

git flow 分支模型

git flow 是最早的也是最熟悉的一种分支模型了,git flow 的分支模型如下:


步骤

  • master分支不做代码提交,master为生产环境运行代码
  • 开发主要在develop分支上进行提交
  • 功能开发切换一个新的功能分支上,功能分支完成后需合并到develop分支
  • 用release分支做版本发布,release用于预发布环境测试
  • release分支从开发分支切出来,完成后需要合并到master分支和develop分支
  • 预发布环境测试无误后,release分支合并到master分支,发布到生产环境测试
  • 生产环境测试完成后release分支可以删除
  • 生产环境运行中紧急修复采用hotfix分支,hotfix分支从mater分支切出
  • hotfix分支修复后需合并会master分支和develop分支

功能开发

创建功能分支

# 从develop创建功能分支
$ git checkout -b myfeature develop


完成功能分支,合并develop,并推送到远程仓库

# 切换到develop分支
$ git checkout develop
# develop分支合并功能分支
$ git merge --no-ff myfeature
# 删除功能分支
$ git branch -d myfeature
# 推到远程仓库
$ git push origin develop


版本发布

版本发布前,创建版本分支

# 从develop分支切到版本发布分支
$ git checkout -b release-1.2 develop

完成版本测试后,合并到master分支上

# 切换到master
$ git checkout master
# master合并release分支
$ git merge --no-ff release-1.2
# 给master分支打tag
$ git tag -a 1.2

生产环境测试没有问题后,将release分支合并会develop分支,并删除release分支

# 切换到develop分支
$ git checkout develop
# develop分支合并release分支
$ git merge --no-ff release-1.2
# 删除release分支
$ git branch -d release-1.2


临时补丁

生产环境上发现bug,直接通过hotfix快速修复:

# 从master切出一条分支,紧急修复问题
$ git checkout -b hotfix-1.2 master

完成问题修复后,合并进master:

# 切到master分支
$ git checkout master
# master分支合并hotfix分支
$ git merge --no-ff hotfix-1.2
# 打上新tag
$ git tag -a 1.2
# 切换到develop分支

如果当前release分支还未删除,合并到release分支,再由release分支合并到develop分支:

$ git checkout release-1.2
# release-1.2合并hotfix分支
$ git merge --no-ff hotfix-1.2
# 删除hotfix分支
$ git branch -d hotfix-1.2
# 切换到develop分支
$ git checkout develop
# develop分支合并release分支
$ git merge --no-ff release-1.2

如果release分支已删除,则直接合并到develop分支:

# 切换到develop分支
$ git checkout develop
# develop分支合并release分支
$ git merge --no-ff hotfix-1.2
# 删除hotfix分支
$ git branch -d hotfix-1.2

原则

  • 开发永远不直接提交到master分支,master保留用于发布到生产中的代码
  • 尽量一个任务,一个功能分支
  • 在合并到开发分支前,对每个merge requests测试
  • 新功能只添加到develop分支

优缺点

优点:

  • 流程清晰,覆盖面全,通过分支模型将工作流串通
  • git flow作为最早提出的分支模型,也是最广泛使用的分支模型,受众广泛
  • 以master作为生产分支,面向单版本的线上产品迭代

缺点:

  • 分支十分复杂,敏捷性较差
  • 仅master分支上做持续集成,而大部分工具默认将master分支设为默认分支,因此经常面临分支切换,导致很繁琐
  • 修补分支和发布分支设置繁琐,比如每次使用修补分支都需要同时合并到master和develop分支,但开发经常犯错误,比如忘记合并回develop分支

Github Flow 分支模型

面对git flow的繁琐,github flow分支模型仅具有功能分支和主分支,将所有内容合并到master分支中并进行部署,采用pull request方式进行代码合并,强调持续集成和连续交付。


优点:

  • 流程十分简单,可以满足敏捷交付
  • 不需要频繁切换分支,在自己的仓库进行开发,统一合并master
  • 每次提交均需要测试

缺点:

  • 对自动化测试要求较高,需要大量的单元测、端到端测试和集成测试
  • 模型过于简单,对于部署、发版和集成上存在着大量问题

Gitlab Flow 分支模型

结合了git flow分支模型和github flow分支模型:


  • 需要一个staging环境和pre-production环境(两个生产环境镜像)
  • 所有请求直接提交到master分支,每次提交都做持续集成和测试,主要是自动化测试
  • 部署发布的时候,从master中摘取(cherry Pick)核心发布功能到”release-x.x.x-alpha”分支进行测试,并在其上进行修复
  • 测试通过后,切换到”release-x.x.x”分支并删除”release-x.x.x-alpha”分支,将”release-x.x.x”分支发布到生产环境中进行测试
  • 生产环境测试通过后,将”release-x.x.x”合并回master

要使用好cherry-pick,每个提交要清晰简洁

优缺点

优点:

  • 相比git flow分支模型更简单,减少了分支数量
  • 和github flow分支模型一样,更强调测试,对所有提交都需进行测试或code review

缺点:

  • 需要自动化测试流程支撑,需要有较好的持续集成和连续交付基础

参考资料

  • https://wiki.corp.realibox.com/pages/viewpage.action?pageId=20414517
  • https://www.shikanon.com/2020/%E7%AE%A1%E7%90%86/%E4%BB%A3%E7%A0%81%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86%E8%A7%84%E8%8C%83/
  • https://forge.etsi.org/rep/help/workflow/gitlab_flow.md

相关推荐

七条简单命令让您玩转Git
七条简单命令让您玩转Git

凭借着出色的协作能力、快速部署效果与代码构建辅助作用,Git已经得到越来越多企业用户的青睐。除了用于开发商业及消费级应用之外,众多科学及政府机构也开始尝试使用这...

2023-10-07 12:14 guanshanw

基本完整的关于Git分支branch的操作
基本完整的关于Git分支branch的操作

Git使用背景项目中要用到dev或者其他分支开发完代码,需要将该分支合并到master的需求操作步骤下面以dev名称为lex为分支名为例来操作一遍客户端操作:...

2023-10-07 12:14 guanshanw

Git 进阶(合并与变基)
Git 进阶(合并与变基)

在Git中整合来自不同分支的修改主要有两种方法:合并(merge)以及变基(rebase)合并(merge)merge流程图merge的原理是找到这两个分...

2023-10-07 12:13 guanshanw

Git学习笔记 003 Git进阶功能 part5 合并(第一部分)

合并(merge)是很常用的操作。尤其是一个庞大的很多人参与开发的企业级应用。一般会设定一个主分支,和多个副分支。在副分支开发完成后,合并到主分支中。始终保持主分支是一个完整的,稳定的最新状态的分支。...

非标题党,三张图帮你理解git merge和git rebase的区别
非标题党,三张图帮你理解git merge和git rebase的区别

初始场景:基于正常的开发分支修改几个小bug,然后在合并到开发分支上。gitmergegitcheckoutfeaturegitmergeho...

2023-10-07 12:13 guanshanw

git 初次使用(01)
git 初次使用(01)

先从github上克隆代码下来:使用vscode克隆代码如下图,填写上github仓库地址:vscode有时候克隆代码速度比较慢,可以用命令行方式克隆gitc...

2023-10-07 12:12 guanshanw

Git 远程操作

4.Git远程操作命令说明gitremote远程版本库操作gitfetch从远程获取版本库gitpull下载远程代码并合并gitpush上传远程代码并合并4.1远程版本库操作gitre...

Git常用命令-总结
Git常用命令-总结

创建git用户$gitconfig--globaluser.name"YourName"$gitconfig--globaluser.em...

2023-10-07 12:12 guanshanw

git中删除从别人clone下来项目的git信息,并修改为自己的分支

如果你从别人的Git存储库中克隆了一个项目,并想要删除与该存储库相关的Git信息,并将其修改为你自己的分支,则可以执行以下步骤:使用gitclone命令克隆存储库:gitclone<u...

git系列-回滚和放弃本地修改

回滚历史提交就是reset的功能。这种情况是已经提交远程仓库,需要回滚到之前的提交。gitreset--hardcommitId//注:强制提交后,当前版本后面的提交版本将会删掉!gi...

GIT使用小技巧大全
GIT使用小技巧大全

在大型软件工程的开发过程中,版本控制是无法绕过去的;目前来说,最火的版本控制软件就是GIT了。早两年SVN比较火,不过被大神linus喷了几次后,就日落西山了,...

2023-10-07 12:11 guanshanw

git相关命令-上
git相关命令-上

这些命令都是看了文档后,个人觉得比较有用的一些,展示给大家。回到远程仓库的状态抛弃本地所有的修改,回到远程仓库的状态。gitfetch--all&...

2023-10-07 12:10 guanshanw

Git命令行接口:掌握Git的必备技能
Git命令行接口:掌握Git的必备技能

Git是一款强大的分布式版本控制工具,它支持命令行界面操作。熟练掌握Git命令行接口,是开发者使用Git的必备技能之一。在这篇文章中,我们将介绍Git命令行接口...

2023-10-07 12:10 guanshanw

Git命令详解
Git命令详解

相信各位小伙伴们应该都对git有一些了解,毕竟作为代码管理的神器,就算不是IT行业的小伙伴肯定也或多或少的听说过一些。今天就来和小伙伴们分享一下自己总结的常用命...

2023-10-07 12:10 guanshanw

工作7年收集到的git命令
工作7年收集到的git命令

概念git中的术语解释:仓库也叫版本库(repository)stage:暂存区,add后会存到暂存区,commit后提交到版本库git安装linux...

2023-10-07 12:10 guanshanw

取消回复欢迎 发表评论: