gitflow 是什么,有哪些优缺点?

  • 1. 什么是git
  • 2. git的优点
  • 3. GitFlow 协同工作流
    • 3.1 GitFlow的由来
    • 3.1 GitFlow中分支角色们
    • 3.2 GitFlow的优点
    • 3.3 GitFlow的缺点
  • 总结

1. 什么是git

Git是一个分布式的版本管理工具,它分为远程仓库(云端仓库,存在后端服务器中)(仓库:repository简写repo:)和本地仓库。本地和云端的仓库的维护机制是类似的,它们都是使用一个类似一个树形结构的数据结构来维护的。每次的文件内容的改变都是一个节点(blob节点),每个commit都是一个tree节点,节点中附带代码的操作信息和节点类型。详见:传送门。

2. git的优点

  1. git 是分布式的,有本地分支管理功能,所以,就算没有网络也可以进行本地的维护。
  2. git的每个变动都是一个节点因此,每次的文件内容的变动都可以单独保存并且可以逐个的进行应用管理。在所有代码合并后也可以看到所有变更内容,而其他的版本管理工具则不可以。
  3. 由于git每次的变更都会生成一个完整的文件快照,所以它非常快。用空间来换取时间。
  4. 由于git会面临内存问题,它有自己的内存维护机制比如:删掉无用的节点,压缩打包历史记录等…
  5. git有非常多的命令,可以灵活的使用。详见:传送门

3. GitFlow 协同工作流

其实GitFlow并非什么技术,而是一种代码开发合并管理流程的思维模式或者是管理方法。大家一起开发的一种软约定。

3.1 GitFlow的由来

我们为什么需要GitFlow这种git管理流程?原因有以下几点

  1. 有一个稳定版本的代码分支,可以安心的用在线上发布。
  2. 在代码提测前或者说是代码达到预发状态时,在测试交付的过程中程序员们还可以继续进行下一个版本的开发工作(挤出每一秒去开发-_-’’)。
  3. 有个一个分支可以让我们及时的对线上的bug进行修复,这个过程中我们不希望将正在开发中的代码提交到线上生产中去。

由于上述开发过程中面临的需求,GitFlow协同国祚流应运而生。对应的点就是

  1. 代码共享
  2. 不同环境下代码互不干扰
  3. 管理好代码与环境的一致性

3.1 GitFlow中分支角色们

  1. Master 分支: 稳定版本代码分支,用作发布环境,上面的每次提交都是可以发布的。
  2. Feture 分支: 功能分支,用于开发功能(需求),用于开发环境
  3. Developer 分支: 开发分支, 一旦Feture分支内功能开发完成就将Feture中的代码合并到Developer分支中,合并完成后,删除该功能分支。这个分支对应的是集成测试环境。
  4. Release 分支:预发分支,做发布前的准备工作,对应的是预发环境。这个分支可以确保们开发继续向前,不会因为要发布不而被停滞住。一旦Release分支达到了可发布的状态,我们需要把Release分支同时向Master,Developer分支上合并,保持代码的一致性,然后把Release分支删除。
  5. Hotfix 分支: 线上bug修缮用的分支,每次修改线上代码的bug时都要用hotfix来维护,完成后向Developer和Master同时合并。完成后删除分支。

以上就是GitFlow中所有角色分支,从中我们可以看到以下几点:

  1. Master和Developer需要我们长期维护,也是我们开发的主干线。
  2. 其中relesase和hotfix两个分支的操作会很零碎,操作起来会比较麻烦,在这个过程中很容易产生失误,导致代码不一致。所以我们需要一个号的工具或者脚本来完成此步骤。
  3. 这个套流程虽然麻烦,但是他可以应用到几乎所有的开发流程中:瀑布型,敏捷性(waterfall,agile)

3.2 GitFlow的优点

  1. 适应场景多
  2. 不影响开发进度
  3. 分支使用相对有条理
  4. 确保线上的版本稳定

3.3 GitFlow的缺点

当然GitFlow并不是完美的,这只是种管理思维,一下是他的一些缺点:

  1. 因为分支态度,所以会出现git log混乱的局面:主要是因为git-flow使用git merge --no-ff来合并分支,在git-flow这种多分支的环境下会让整个项目的log变的非常混乱。


对于整个中情况我们可以:只有feature合并到developer分支时, 使用-no-ff参数,其他的合并都不使用–no-ff
** 什么是 git merge --no-ff:

 --no-ff指的是强行关闭fast-forward方式。fast-forward方式就是当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commitgit merge --squash 是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用--squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit来“总结”一下,然后完成最终的合并。总结:--no-ff:不使用fast-forward方式合并,保留分支的commit历史--squash:使用squash方式合并,把多次分支commit历史压缩为一次
  1. 同时维护Master和Developer两个分支很多时候是没必要的,因为在很多场景下Master中的内容和Developer中的内容是差不多的。尤其当你想回滚某些人的提交时,你就会发现这事似乎有点儿不好干了。而且在工作过程中,你会来来回回地切换工作的分支,有时候一不小心没有切换,就提交到了不正确的分支上,你还要回滚和重新提交,等等。

总结

这么看下来GitFlow还是不错的,毕竟他的应用场景比较全面,确实解决了开发时分支混乱的问题,而且为我们提供了代码分支管理的策略和思维。但是它也并不是完美的。我感觉像这种分支管理的规范只是万千分支管理策略中的一种,我们完全可以自己去对它进行修改和调整找到适合自己团队的管理策略。在找寻自己策略时我们可以参考一下几点:

  1. 不同团队保持并行开发
  2. 软件版本和代码的一致性
  3. 环境和代码的一致性
  4. 保证线上有个稳定的代码源
  5. 结合DevOps为主的开发流程(这个才是根本,才是未来)

下面提供其他的一些策略,有兴趣的小伙伴可以自行查阅:
6. GitHub Flow
7. GitLab Flow

gitflow 是什么,有哪些优缺点?相关推荐

  1. Git工作流中常见的三种分支策略:GitFlow、GitHubFlow和GitLabFlow

    摘要:聊一聊Git中的工作流--分支策略. 本文分享自华为云社区<Git工作流中常见的三种分支策略:GitFlow.GitHubFlow以及GitLabFlow>,原文作者:敏捷的小智. ...

  2. gitflow分支管理模型

    gitflow的分支类型: master分支(1个) develop分支(1个) feature分支.同时存在多个. release分支.同一时间只有1个,生命周期很短,只是为了发布. hotfix分 ...

  3. Git基本命令和GitFlow工作流

    本篇博客讲解了git的一些基本的团队协作命令,和GitFlow工作流指南 git 团队协作的一些命令 1.开分支 git branch 新分支名 例如,在master分支下,新开一个开发分支: git ...

  4. MySQL 学习笔记(5)— 视图优缺点、创建视图、修改视图、删除视图

    1. 视图概念 简单来说,视图就是一个预定义的查询语句.视图在许多情况下可以当作表来使用,因此也被称为虚拟表(Virtual Table). 视图与表最大的区别在于它不包含数据,数据库中只存储视图的定 ...

  5. nginx 代理 内存_科普Nginx和apache的区别及优缺点比较

    最近很多小伙伴来问我Nginx和apache的区别,这个问题用三言两语也很难解释,于是整理出了这一篇文章与大家共享.除了Nginx和apache的区别,还比较了各自的优缺点.这是我自学Nginx和工作 ...

  6. singleton设计模式_让我们研究一下Singleton设计模式的优缺点

    singleton设计模式 by Navdeep Singh 通过Navdeep Singh 让我们研究一下Singleton设计模式的优缺点 (Let's examine the pros and ...

  7. javascript优缺点_为什么要在JavaScript中使用静态类型? 优缺点

    javascript优缺点 by Preethi Kasireddy 通过Preethi Kasireddy 为什么要在JavaScript中使用静态类型? 优缺点 (Why use static t ...

  8. 目前流行的源程序版本管理软件和项目管理软件都有哪些?各有什么优缺点?...

    目前流行的源程序版本管理软件和项目管理软件:Microsoft TFS,Github,SVN,Coding 各自的优缺点: Microsoft TFS: 优点: 任务版上能将需求.项目进度一览无余,对 ...

  9. vue与html优势与缺点,vue优缺点详解

    Vue.js是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue采用自底向上增量开发的设计.本文就来为大家介绍一下vue的优缺点,希望对大家有一定的帮助. 一.Vue是什么 Vue.js是 ...

最新文章

  1. metric learning
  2. 0913作业(冒泡排序、二分查找法、模拟摇乐游戏)
  3. Retrofit2.5是如何解析在接口类中定义的请求方法?
  4. php mongo 类,mongo php类
  5. Ubuntu 14.04报错: error while loading shared libraries libc++.so cannot open shared object file解决
  6. Mysql学习笔记(二):子查询与连接
  7. hdu1247 Hat’s Words 字符串模拟
  8. sha256加密_比特币入门(五):比特币的加密
  9. Rust: 为什么同样的情况,有时不需要解引用?
  10. 传统方式不同的变态下载(BT)
  11. Win10环境下VMware安装Mac OS虚拟机并在虚拟机中安装xcode
  12. 个人电脑bt文件服务器,简单实用 教你轻松架设个人BT服务器
  13. SQL语句的连接-内连接 外连接
  14. 周爱民对提升程序员自身技术能力的建议
  15. UML中各种线条关系记忆技巧
  16. 【论文阅读】Hierarchical Multi-modal Contextual Attention Network for Fake News Detection --- 虚假新闻检测,多模态
  17. SpringBoot项目启动Disconnected from the target VM
  18. Maven 入门教程
  19. 小学科学杂志小学科学杂志社小学科学编辑部2022年第12期目录
  20. 数字与表达式——字符串

热门文章

  1. 巴比特 | 元宇宙每日必读:后疫情时代,元宇宙社会加速发展,我们需要注意哪些风险?...
  2. 优漫动游零基础学平面设计,该报班还是自学?
  3. Ubuntu下的Notepad++:Notepadqq
  4. 安全应该服务于业务|中安网星创始人入选2021福布斯中国U30
  5. 中山大学曾兆阳_魔镜-陕西微软创新中心
  6. STM32 系列产品命名规则
  7. js鼠标移入移出连续闪烁问题
  8. docker容器内无法访问外网问题
  9. 我想起那天夕阳下的奔跑,那是我逝去的青春
  10. STM32关于触摸芯片 BS8112A-3 BS8116A-3 I2C 源程序 及问题