GitFlow 工作流

1.概述

GitFlow 工作流定义了一个围绕项目发布的严格分支模型。虽然比功能分支工作流复杂几分,但提供了用于一个健壮的用于管理大型项目的框架。

GitFlow 工作流没有用超出功能分支工作流的概念和命令,而是为不同的分支分配一个很明确的角色,并定义分支之间如何和什么时候进行交互。除了使用功能分支,在做准备、维护和记录发布也使用各自的分支。当然你可以用上功能分支工作流所有的好处:Pull Requests、隔离实验性开发和更高效的协作。

2.工作方式

GitFlow 工作流仍然用中央仓库作为所有开发者的交互中心。和其它的工作流一样,开发者在本地工作并 push 分支到中央仓库中。

1.历史分支

相对使用仅有的一个 master 分支,GitFlow 工作流使用2个分支来记录项目的历史。master 分支存储了正式发布的历史,而 develop 分支作为功能的集成分支。这样也方便 master 分支上的所有提交分配一个版本号。

剩下要说明的问题围绕着这2个分支的区别展开。

2.功能分支

每个新功能位于一个自己的分支,这样可以 push 到中央仓库以备份和协作。但功能分支不是从 master 分支上拉出新分支,而是使用 develop 分支作为父分支。当新功能完成时,合并回 develop 分支。新功能提交应该从不直接与 master 分支交互。

注意,从各种含义和目的上来看,功能分支加上 develop 分支就是功能分支工作流的用法。但 GitFlow 工作流没有在这里止步。

3.发布分支

一旦 develop 分支上有了做一次发布(或者说快到了既定的发布日)的足够功能,就从 develop 分支上 fork 一个发布分支。新建的分支用于开始发布循环,所以从这个时间点开始之后新的功能不能再加到这个分支上 —— 这个分支只应该做 Bug 修复、文档生成和其它面向发布任务。一旦对外发布的工作都完成了,发布分支合并到 master 分支并分配一个版本号打好 Tag。另外,这些从新建发布分支以来的做的修改要合并回 develop 分支。

使用一个用于发布准备的专门分支,使得一个团队可以在完善当前的发布版本的同时,另一个团队可以继续开发下个版本的功能。这也打造定义良好的开发阶段(比如,可以很轻松地说,『这周我们要做准备发布版本 4.0』,并且在仓库的目录结构中可以实际看到)。

常用的分支约定:

  • 用于新建发布分支的分支: develop
  • 用于合并的分支: master
  • 分支命名: release-* 或 release/*

4.维护分支

维护分支或说是热修复(hotfix)分支用于生成快速给产品发布版本(production releases)打补丁,这是唯一可以直接从 master 分支 fork 出来的分支。修复完成,修改应该马上合并回 master 分支和 develop 分支(当前的发布分支),master 分支应该用新的版本号打好 Tag。

为 Bug 修复使用专门分支,让团队可以处理掉问题而不用打断其它工作或是等待下一个发布循环。你可以把维护分支想成是一个直接在 master 分支上处理的临时发布。

3.示例

下面的示例演示本工作流如何用于管理单个发布循环。假设你已经创建了一个中央仓库。

1.创建开发分支

第一步为 master 分支配套一个 develop 分支。简单来做可以本地创建一个空的 develop 分支,push 到服务器上:

git branch develop
git push -u origin develop   // -u 跟踪此分支

以后这个分支将会包含了项目的全部历史,而 master 分支将只包含了部分历史。其它开发者这时应该克隆中央仓库,建好 develop 分支的跟踪分支:

git clone ssh://[email protected]/path/to/repo.git
git checkout -b develop origin/develop

现在每个开发都有了这些历史分支的本地拷贝。

2.小红和小明开始开发新功能

这个示例中,小红和小明开始各自的功能开发。他们需要为各自的功能创建相应的分支。新分支不是基于 master 分支,而是应该基于 develop 分支:

git checkout -b some-feature develop

他们用老套路添加提交到各自功能分支上:编辑、暂存、提交:

git status
git add
git commit

3.小红完成功能开发

添加了提交后,小红觉得她的功能 OK 了。如果团队使用 Pull Requests,这时候可以发起一个用于合并到 develop 分支。否则她可以直接合并到她本地的 develop 分支后 push 到中央仓库:

git pull origin develop -- 将develp更新到最新
git checkout develop  -- 切换本地分支
git merge some-feature  -- 将some-feature分支合并到develop分支
git push      -- 提交到远程
git branch -d some-feature  -- 删除分支

第一条命令在合并功能前确保 develop 分支是最新的。注意,功能决不应该直接合并到 master 分支。冲突解决方法和集中式工作流一样。

4.小红开始准备发布

这个时候小明正在实现他的功能,小红开始准备她的第一个项目正式发布。像功能开发一样,她用一个新的分支来做发布准备。这一步也确定了发布的版本号:

git checkout -b release-0.1 develop

这个分支是清理发布、执行所有测试、更新文档和其它为下个发布做准备操作的地方,像是一个专门用于改善发布的功能分支。

只要小红创建这个分支并 push 到中央仓库,这个发布就是功能冻结的。任何不在 develop 分支中的新功能都推到下个发布循环中。

5.小红完成发布

一旦准备好了对外发布,小红合并修改到 master 分支和 develop 分支上,删除发布分支。合并回 develop 分支很重要,因为在发布分支中已经提交的更新需要在后面的新功能中也要是可用的。另外,如果小红的团队要求 Code Review,这是一个发起 Pull Request 的理想时机。

git checkout master
git merge release-0.1
git push
git checkout develop
git merge release-0.1
git push
git branch -d release-0.1

发布分支是作为功能开发(develop 分支)和对外发布(master 分支)间的缓冲。只要有合并到 master 分支,就应该打好 Tag 以方便跟踪。

git tag -a 0.1 -m "Initial public release" master
git push --tags

Git 有提供各种勾子(hook),即仓库有事件发生时触发执行的脚本。可以配置一个勾子,在你 push 中央仓库的 master 分支时,自动构建好对外发布。

6.最终用户发现 Bug

对外发布后,小红回去和小明一起做下个发布的新功能开发,直到有最终用户开了一个 Ticket 抱怨当前版本的一个 Bug。为了处理 Bug,小红(或小明)从 master 分支上拉出了一个维护分支,提交修改以解决问题,然后直接合并回 master 分支:

git checkout -b issue-#001 master
# Fix the bug
git checkout master
git merge issue-#001
git push

就像发布分支,维护分支中新加这些重要修改需要包含到 develop 分支中,所以小红要执行一个合并操作。然后就可以安全地删除这个分支了:

git checkout develop
git merge issue-#001
git push
git branch -d issue-#001

4.总结

到了这里,但愿你对集中式工作流、功能分支工作流和 GitFlow 工作流已经感觉很舒适了。你应该也牢固的掌握了本地仓库的潜能,push/pull 模式和 Git 健壮的分支和合并模型。

记住,这里演示的工作流只是可能用法的例子,而不是在实际工作中使用 Git 不可违逆的条例。所以不要畏惧按自己需要对工作流的用法做取舍。不变的目标就是让 Git 为你所用。

原文地址:https://www.cnblogs.com/sunweiye/p/11828130.html

时间: 2024-07-31 02:52:01

GitFlow 工作流的相关文章

Git基本命令和GitFlow工作流

本篇博客讲解了git的一些基本的团队协作命令,和GitFlow工作流指南 git 团队协作的一些命令 1.开分支 git branch 新分支名 例如,在master分支下,新开一个开发分支: git branch dev 2.切换到新分支 git checkout 分支名 例如,在master分支下,切换到新开的dev: git checkout dev 3.开分支和切换分支合并到一个命令 git checkout -b 新分支名 例如,新开一个开发分支,并立即切换到该分支: git chec

gitflow工作流简介

gitflow工作流是一种依赖于Git版本管理工具,按特定规范对项目开发.测试.上线流程进行管理的工作方式.它是一种为实现规范化管理的约定,它明确了各个分支的意义,使整个团队的分工协作更加和谐明晰. 一.gitflow工作流约定使用的分支简介 [master]项目的核心分支,也是最终对外发布的分支,唯一且稳定.仅提供可读,不可在该分支上直接修改代码. [develop]项目的开发主干分支,唯一.仅提供可读,不可在该分支上直接修改代码.新功能的开发需从该分支拉取新的分支展开.develop分支应该

Git之GitFlow工作流

一. GitFlow 介绍 1.1 什么是 GitFlow GitFlow 是一种 Git 工作流,它是团队成员遵守的一种代码管理方案 . 1.2 GitFlow 常用分支说明 分支名称 分支说明 Production 生产分支,即 Master分支.只能从其他分支合并,不能直接修改 Release 发布分支,基于 Develop 分支创建,待发布完成后合并到 Develop 和 Production 分支去 Develop 主开发分支,包含所有要发布到下一个 Release 的代码,该分支主要

GitFlow工作流常用操作流程

1. 主要分支介绍 1.1 master分支 主分支,产品的功能全部实现后,最终在master分支对外发布. 1.2 develop分支 开发分支,基于master分支克隆,产品的编码工作在此分支进行. 1.3 release分支 测试分支,基于delevop分支克隆,产品编码工作完成后,发布到本分支测试,测试过程中发现的小bug直接在本分支进行修复,修复完成后合并到develop分支.本分支属于临时分支,目的实现后可删除分支. 1.4 bugfix分支 Bug修复分支,基于master分支或发

gitflow工作流

开发者 创建自己的功能分支 在自己的功能分支上进行开发 提交合并请求 在维护分支和测试分支中对代码进行修改 项目经理 创建develop分支 审批合并请求 合并测试分支到主分支 gitflow演示 git checkout -b develop origin/develop # 创建并切换到本地develop分支, 设置其追踪的远程分支为origin/develop git checkout -b f_detail # 创建并切换到本地分支f_detail git branch -d f_det

深入理解学习Git工作流

一.译序 工作流其实不是一个初级主题,背后的本质问题其实是有效的项目流程管理和高效的开发协同约定,不仅是Git或SVN等VCS或SCM工具的使用. 这篇指南以大家在SVN中已经广为熟悉使用的集中式工作流作为起点,循序渐进地演进到其它高效的分布式工作流,还介绍了如何配合使用便利的Pull Request功能,体系地讲解了各种工作流的应用. 行文中实践原则和操作示例并重,对于Git的资深玩家可以梳理思考提升,而新接触的同学,也可以跟着step-by-step操作来操练学习并在实际工作中上手使用. 关

深入学习 Git 工作流

原文  https://github.com/xirong/my-git/blob/master/git-workflow-tutorial.md 个人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协作模式,直到有一天我看到了下面的文章,好多遗留在心中的困惑迎刃而解: 我们以使用SVN的工作流来使用git有什么不妥? git 方便的branch在哪里,团队多人如何协作?冲突了怎么办?如何进行发布控制? 经典的master-发布.develop-主开发.hotfix-不过修

Git - Pull Request工作流

Pull Requests是Bitbucket上方便开发者之间协作的功能.提供了一个用户友好的Web界面,在集成提交的变更到正式项目前可以对变更进行讨论. 开发者向团队成员通知功能开发已经完成,Pull Requests是最简单的用法.开发者完成功能开发后,通过Bitbucket账号发起一个Pull Request.这样让涉及这个功能的所有人知道,要去做Code Review和合并到master分支. 但是,Pull Request远不止一个简单的通知,而是为讨论提交的功能的一个专门论坛.如果变

四种常见 Git 工作流比较

轉載:http://toutiao.io/contribute 多种多样的工作流使得在项目中实施Git时变得难以选择.这份教程提供了一个出发点,调查企业团队最常见的Git工作流. 阅读的时候,请记住工作流应该是一种规范而不是金科玉律.我们希望向你展示所有工作流,让你融会贯通,因地制宜. 这份教程讨论了下面四种工作流: 中心化的工作流 基于功能分支的工作流 Gitflow工作流 Fork工作流 中心化的工作流 过渡到分布式分版本控制系统看起来是个令人恐惧的任务,但你不必为了利用Git的优点而改变你