Gitflow是一种用于管理Git分支的颠覆性和新颖性策略。Gitflow在基于主干的工作流上越来越受欢迎,它被称为现代持续软件开发和DevOps模式的最佳实践。Gitflow同样可用于CI/CD。

什么是Gitflow?

Gitflow是一种多分支管理的Git分支模型。它由文森特·德里森 (Vincent Driessen) 在 nvie 首次发布。对比基于主干的开发模式,GItflow拥有数量更多,存活时间更长,更多提交的特点。在这种模式下,开发者创建一个功能分支并延迟将其合并到主干分支直到功能完成。这种长存活功能分支需要更多的协作才能合并并且存在更高的偏离主干分支的风险,有可能会引发冲突。

Gitflow适用于具备预定发布周期的项目和持续交付的DevOps最佳实践。这种工作流不会新增超过功能分支工作流所需的新概念或新命令。它为不同的分支分配了非常具体的角色,并定义了它们应该如何以及何时交互。除了功能分支之外,它还使用单独的分支来准备、维护和记录版本。当然,您还可以利用功能分支工作流程的所有优势:拉取请求、独立实验和更高效的协作。

入门

Gitflow 实际上只是 Git 工作流程的抽象概念。 这意味着它规定了要设置什么样的分支以及如何将它们合并在一起。 我们将在下面讨论分支的目的。 git-flow 工具集是一个具有安装过程的实际命令行工具。 git-flow 的安装过程很简单。 git-flow 的软件包可在多个操作系统上使用。 在 OSX 系统上,您可以执行 brew install git-flow。 在 Windows 上,您需要下载并安装 git-flow。 安装 git-flow 后,您可以通过执行 git flow init 在项目中使用它。 Git-flow 是一个围绕 Git 的包装器。 git flow init 命令是默认 git init 命令的扩展,除了为您创建分支外,不会更改存储库中的任何内容。

怎么运行

Develop和Main分支

相对采用单分支管理,Git工作流使用两个分支来记录项目记录。 主分支用作存储官方发布记录,开发分支用作功能的集成分支。 使用版本号标记主分支中的所有提交也很方便。

第一步是从main创建一个开发分支。一种简单的方法是让开发人员在本地创建一个空的开发分支并将其推送到服务器:

git branch develop git push -u origin develop

develop分支将包含项目的完整历史记录,而 main分支将只包含最新的生产版本。其他开发人员应从develop分支clone创建一个本地跟踪分支。

如果采用 git-flow 扩展库,使用git flow init 命令将自动创建develop分支:

$ git flow init Initialized empty Git repository in ~/project/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [main]
Branch name for "next release" development: [develop]
How to name your supporting branch prefixes? Feature branches? [feature/]
Release branches? [release/] Hotfix branches? [hotfix/] Support branches? [support/]
Version tag prefix? [] $ git branch * develop   main

Feature分支

每个新功能都应该创建自己的功能分支,如果需要备份/协作可以将其推送到中央存储库。但是,feature分支不应该从main分支拷贝,而是从最新的开发分支拷贝创建。当一个功能完成后,它会被合并回develop。feature分支不应该直接与 main 交互。

通过以下命令创建feature分支

不使用git-flow插件:

git checkout develop
git checkout -b feature_branch

使用git-flow插件:

git flow feature start feature_branch

当完成功能的开发工作后,下一步是将 feature_branch 合并到develop。

不使用git-flow插件:

git checkout develop
git merge feature_branch

使用git-flow插件:

git flow feature finish feature_branch

Release分支

一旦 develop 具备发布条件,我们就可以从 develop 分支分支发布。创建release分支后会启动下一个发布周期,因此在此之后不能添加新功能——只有bugfix、文档编辑和其他面向发布的任务才能在release分支中进行。但具备发布条件后,发布分支会合并到 main 分支中,并打上版本号标记。此外,我们还应该重新合并到develop中,y因为从创建release以来可能存在变化。

使用专门的分支来准备发布,可以让一个团队继续完善当前版本,而另一个团队并行为下一个版本开发功能。它还创建了明确的开发阶段(例如,“本周我们开发版本 4.0”,我们可以在GIT库中实际看到4.0的功能分支)。

创建release分支是一个简单的分支操作,和feature分支一样,release分支也是基于develop分支的。可以使用以下方法创建新的release分支。

不使用git-flow插件:

git checkout develop
git checkout -b release/0.1.0

使用git-flow插件:

$ git flow release start 0.1.0
Switched to a new branch 'release/0.1.0'

一旦release分支完成发布,它将被合并到main和develop分支中,然后release分支将被删除。重新合并到develop分支中很重要,因为可能已将关键更新添加到release分支中,并且需要新功能可以使用它们。

通常采用以下方式完成release分支

不使用git-flow插件:

git checkout main
git merge release/0.1.0

使用git-flow插件:

git flow release finish '0.1.0'

Hotfix分支

hotfix分支用于快速修补生产版本。hotfix分支和release分支、feature分支很像,只是它基于 main分支 而不是develop分支,它是唯一应该直接从 main 分支clone的分支。修复完成后,hotfix分支将合并到main分支和develop分支(或当前版本分支)中,并且main分支应使用更新的版本号进行标记。

拥有专门的Hotfix分支可以让团队解决问题而无需中断当前工作版本或等待下一个发布周期,Hotfix通常为临时分支。可以采用以下方式创建Hotfix分支:

不使用git-flow插件:

git checkout main git checkout -b hotfix_branch

使用git-flow插件:

git flow hotfix start hotfix_branch

与完成release分支类似,hotfix分支会合并到main分支和develop分支中。

不使用git-flow插件:

git checkout main
git merge hotfix_branch
git checkout develop
git merge hotfix_branch
git branch -D hotfix_branch

使用git-flow插件:

$ git flow hotfix finish hotfix_branch

示例

一个完整的分支流程的示例如下:

git checkout main
git checkout -b develop
git checkout -b feature_branch
# work happens on feature branch
git checkout develop
git merge feature_branch
git checkout main
git merge develop
git branch -d feature_branch

除了feature流程之外,还有一个 hotfix 示例如下:

git checkout main
git checkout -b hotfix_branch
# work is done commits are added to the hotfix_branch
git checkout develop
git merge hotfix_branch
git checkout main
git merge hotfix_branch

参考

Gitflow Workflow | Atlassian Git TutorialA deep dive into the Gitflow Workflow. Learn if this Git workflow is right for you and your team with this comprehensive tutorial.https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow#:~:text=Gitflow%20is%20a%20legacy%20Git,software%20development%20and%20DevOps%20practices.https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow#:~:text=Gitflow%20is%20a%20legacy%20Git,software%20development%20and%20DevOps%20practices.

GitFlow工作流相关推荐

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

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

  2. GitFlow 工作流和Code Review教程

    参考:https://www.cnblogs.com/ken-io/p/gitlab-code-review-tutorial.html (基于GitLab的Code Review教程,结合IDE) ...

  3. 为什么使用 Git-flow 工作流

    该内容由联想乐窗团队张敬佩整理 内容摘自网上,如有侵权,联系删除 Git-flow 工作流介绍 主要内容 本文主要分主要包括以下几个部分的内容 集中式工作流 功能分支工作流 功能分支工作流的问题 gi ...

  4. 玩转git-flow工作流-分支解析

    概述 搞开发的相信大部分人git天天都在用,那么一般我们在实际工程当中,遵循一个合理.清晰的Git使用流程,是非常重要的.否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护. ...

  5. git-flow工作流说明

    本文以一虚拟项目为例,描述了Git Flow在项目中的应用:还以此为主线,以表格形式给出了速查手册:最后,结合这两点介绍了一个基于Git Flow的项目实例. 希望这篇文章能够帮助Git初学者尽快上手 ...

  6. 【Git|GitHub|SSH|Sourcetree 下篇】GitHub|Sourcetree|SSH部署及Git-flow工作流

    ⌚️⌚️⌚️个人格言:时间是亳不留情的,它真使人在自己制造的镜子里照见自己的真相!

  7. Git之GitFlow工作流 | Gitflow Workflow(万字整理,已是最详)

    目录

  8. Gitflow(git工作流)

    Gitflow(git工作流) 我第一次接触这个概念,是出于一个偶然的机会,用的Git客户端SourceTree ,在右上角有个按钮"git工作流",出于好奇点开看了下,弹出对话框 ...

  9. 深入理解学习Git工作流

    2019独角兽企业重金招聘Python工程师标准>>> 个人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协作模式,直到有一天我看到了下面的文章,好多遗留在心 ...

最新文章

  1. http://jingyan.baidu.com/article/dca1fa6fa07000f1a44052f6.html
  2. [OpenGL ES 03]3D变换:模型,视图,投影与Viewport
  3. vue watch监听对象
  4. 开源 免费 java CMS - FreeCMS1.5 标签 ajaxStore
  5. [POJ 1006] 生理周期
  6. Codeforces 1013
  7. 台达plc用c语言编程软件,台达plc编程
  8. 图像复原技术及其MATLAB实现
  9. 在 Hexo 中使用 iconfont 图标
  10. 腾讯云短信服务php发送短信
  11. Linux——MySQL分表分区
  12. 每日一诗词 —— 行路难
  13. python这个单词的含义是什么_python style是什么意思
  14. 包的概念与常见内置模块
  15. 第三批更新鸿蒙系统,emui11第三批更新名单-emui11第三批更新名单介绍 - 系统家园...
  16. 微信定位和HTML5定位
  17. logstash 数据重复问题
  18. 实战车载以太网线束测试-AEM线缆认证测试仪
  19. javascript调用c/c++程序
  20. PPP、HDLC协议配置

热门文章

  1. HashMap 原理详解
  2. Zookeeper集群与分布式理论
  3. 20155229《网络对抗技术》Exp4:恶意代码分析
  4. 服务器资源错误导致更新文件dns,DNS 更新被记录为失败︰ 事件 ID 为 5774,1196 或 1578年...
  5. Redis 笔记系列(十二)——Redis的主从复制、读写分离
  6. MTK 驱动(45)---TP 问题汇总
  7. STM32F103HAL库移植MPU6050的DMP库
  8. 【绝对干货】2021年哔哩哔哩Java高级面试题及答案,完整版开放下载
  9. 微型计算机智能体重评测,荣耀智能体脂秤WiFi版评测:17项身体指标 比你更懂你...
  10. ios手机续航测试软件,iOS14.4.2续航测试:这6款旧iPhone升级续航时间缩短?