Gitflow Workflow 是一个 Git 工作流,有助于持续软件开发和实施 DevOps 实践。 它由文森特·德里森 (Vincent Driessen) 在 nvie 首次出版并广受欢迎。 Gitflow 工作流定义了围绕项目发布设计的严格分支模型。 这为管理大型项目提供了一个强大的框架。

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

Getting Started

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 命令的扩展,除了为您创建分支外,不会更改存储库中的任何内容。

How it works

Develop and Main Branches

此工作流使用两个分支来记录项目的历史记录,而不是单个 main 分支。 Main 存储官方发布历史,开发分支作为功能的集成分支。 用版本号标记主分支中的所有提交也很方便。

第一步是用一个 develop 分支补充默认的主分支。 一种简单的方法是让开发人员在本地创建一个空的 develop 分支并将其推送到服务器:

git branch develop
git push -u origin develop

该分支将包含项目的完整历史记录,而 main 将包含一个删节版本。 其他开发人员现在应该克隆中央存储库并为 develop branch 创建一个跟踪分支。

Feature Branches

每个新功能都应该驻留在自己的分支中,可以将其推送到中央存储库进行备份/协作。 但是,feature 分支不是从 main 分支出来,而是使用 develop 作为它们的父分支。 当一个功能完成时,它会被合并回 develop branch 。 功能不应该直接与 main branch 交互。

请注意, feature 分支与 develop 分支相结合,就所有意图和目的而言,都是功能分支工作流。 但是,Gitflow 工作流并不止于此。

feature 分支通常基于最新的开发分支创建。

Creating a feature branch

git checkout develop
git checkout -b feature_branch

Finishing a feature branch

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

git checkout develop
git merge feature_branch

Release Branches

一旦 develop 获得了足够的发布功能(或预定的发布日期即将到来),您就可以从 develop 中分出一个 release 分支。创建此分支将启动下一个发布周期,因此在此之后不能添加任何新功能——只有错误修复、文档生成和其他面向发布的任务应该在此分支中进行。

一旦准备好发布, release 分支就会合并到 main 分支并标记一个版本号。此外,它应该合并回 develop branch,自发布开始以来,后者可能已经取得了进展。

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

制作 release 分支是另一个简单的分支操作。与功能分支一样,release 分支基于 develop 分支。可以使用以下方法创建新的发布分支。

git checkout develop
git checkout -b release/0.1.0

一旦发布准备好发布,它将合并到 main 和 develop,然后Release 分支将被删除。 合并回 develop 很重要,因为关键更新可能已添加到 Release 分支,并且需要新功能可以访问它们。如果您的组织强调代码审查,这将是拉取请求的理想场所。

要完成发布分支,请使用以下方法:

git checkout main
git merge release/0.1.0

Hotfix Branches

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

拥有专门的错误修复开发线,您的团队可以在不中断工作流程的其余部分或等待下一个发布周期的情况下解决问题。 您可以将 Maintenance 分支视为直接与 main 一起工作的临时 release 分支。 可以使用以下方法创建修补程序分支:

git checkout main
git checkout -b hotfix_branch

类似于完成发布分支,修补程序分支合并到主分支和开发分支。

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

总结

  • develop 分支是从 main 分支创建的
  • 从 develop 创建一个 Release 分支
  • feature 分支是从 develop 创建的
  • 当一个功能完成时,它会被合并到 develop 分支中
  • release 分支完成后,它会合并到 develop 和 main
  • 如果在 main 中检测到问题,则从 main 创建一个 hotfix 程序分支
  • 修补程序完成后,它将合并到 develop 和 main 分支

更多Jerry的原创文章,尽在:“汪子熙”:

大型开发项目中 git 工作流的最佳实践相关推荐

  1. Git工作流程最佳实践总结

    Git作为一个目前非常流行的版本管理工具,深受开发者的喜爱.那么怎样才能将Git的作用发挥的更好呢?我根据实际的项目经验,归纳总结了以下Git工作流的最佳实践.这里所谓的最佳,是经过多次项目经验后,根 ...

  2. 大型EAI项目中的ORACLE 数据库管理(ZT)

    数据库在大型EAI(企业应用集成)项目中扮演着至关重要的角色.目前许多企业都迫切需要将其自身传统的管理与运作模式转化为先进.高效的信息化管理与运作模式.在实施企业信息化的过程中,怎样将该企业原有大量数 ...

  3. 实际项目中的工作流工作原理

    现在公司开发的项目中用到了工作流,在进入本公司之前本屌丝还没有接触过工作流,所以对工作流的工作原理一直很感兴趣,一直在默默的学习,终于有一天本屌突然看懂了源码(大雾,现在我觉得看懂了可能只是骗我自己, ...

  4. 详解使用VueJS开发项目中的兼容问题

    详解使用VueJS开发项目中的兼容问题 本篇文章针对在vue项目中 遇到的兼容性问题以及解决方法做了详细的总结. 一,VUE项目一般会使用axios,而axios又是基于promise的,所以,IE任 ...

  5. java编码规范文档 下载_软件项目实训及课程设计指导——制定待开发项目中各种文档的规范...

    软件项目实训及课程设计指导--制定待开发项目中各种形式文档的规范 1.制定对课程设计项目开发过程中的规范性要求 (1)从"形式"到"内容"两个方面控制和要求开发 ...

  6. 浅析软件开发项目中的需求分析

    [摘要]在软件开发项目中,需求分析是关乎软件项目开发成败的重要因素.现在的软件项目中返工开销占了总开销很大比例,而导致返工的主要原因是需求分析不明确.针对这一情况,文章阐述了软件开发中需求分析任务.需 ...

  7. 项目管理进阶--软件开发项目中的团队组成

    #项目管理进阶–软件开发项目中的团队组成 ##项目经理 项目经理负责分配资源,确定优先级,协调与客户和用户之间的交往.总而言之,就是尽量使项目团队一直集中于正确的目标.项目经理还要建立一套工作方法,以 ...

  8. 声光报警器 | 在软件开发项目中加入声光告警、语音通知方案

    在IT软件开发项目中,有的客户有这样的需求,希望在公司的生产环境中安装硬件设备,比如声光报警灯.语音通知设备等.当软件中的某些重要信息或者异常事件发生时,向设备发送消息,通过警示音.灯光.语音三个维度 ...

  9. Spring Boot 生产中的 16 条最佳实践

    来源:www.e4developer.com/2018/08/06/ Spring Boot是最流行的用于开发微服务的Java框架.在本文中,我将与你分享自2016年以来我在专业开发中使用Spring ...

最新文章

  1. 数据中心机房供电需求有哪些?存在哪些电能质量问题?
  2. SAP中创建分部机构凭证号码并且按年度编号
  3. 从家书到小票!看到海尔智家的转型是真的
  4. 华为的型号命名规则_电力电缆产品的型号命名规则
  5. 计算星期c语言编码,[转载]计算任何一天是星期几的C语言源代码.
  6. java 狗带风波_养狗风波作文
  7. PHP如何有效实现多视频同时上传功能
  8. spring + ehcache 配置
  9. 文件写入一行 、读取一行的工具类案例
  10. php中的转义字符(用反斜杠\来输出,和C语言一样)
  11. 比较x^y和y^x的大小
  12. 【三维路径规划】基于matlab粒子群算法无人机三维路径规划【含Matlab源码 192期】
  13. 基础集合论 第一章 3 集合论的公式和条件
  14. Node.js使用npm下载第三方模块包步骤
  15. his系统计算机软件,医学系统(一)医院常用的软件系统:PACS系统、HIS系统、RIS系统、LIS系统、CIS系统...
  16. android跳转QQ陌生人聊天或者加入QQ群
  17. 2022年全球市场聚苯硫醚纤维总体规模、主要生产商、主要地区、产品和应用细分研究报告
  18. 【ArchSummit】社交元宇宙的技术挑战与探索
  19. 游戏开发19课 tilemap 创建瓦片
  20. 北新建材被授予“亚洲最大石膏板产业集团”硅钙板吊顶

热门文章

  1. 性价比泛滥后,网易严选情怀路线还能否继续吃香?
  2. Json-lib 需要的 jar 包
  3. spring-boot (三) spring data jpa
  4. 机器人学 —— 机器人视觉(极几何)
  5. poj 3522(最小生成树应用)
  6. win8 iis8 asp.net 图片访问需登录
  7. double free or corruption的原因
  8. 提示虚拟内存不足的解决办法
  9. UML模型中的图-用例图
  10. Java中Filter、Listener,拦截器的学习,listener、 filter、servlet 加载顺序及其详解