文档章节

gitflow分支管理模型

daniel-john
 daniel-john
发布于 2015/02/26 11:10
字数 1131
阅读 53
收藏 0
点赞 0
评论 0

gitflow的分支类型:

  • master分支(1个)

  • develop分支(1个)

  • feature分支。同时存在多个。

  • release分支。同一时间只有1个,生命周期很短,只是为了发布。

  • hotfix分支。同一时间只有1个。生命周期较短,用了修复bug或小粒度修改发布。

在这个模型中,master和develop都具有象征意义。master分支上的代码总是稳定的(stable build),随时可以发布出去。develop上的代码总是从feature上合并过来的,可以进行Nightly Builds,但不直接在develop上进行开发。当develop上的feature足够多以至于可以进行新版本的发布时,可以创建release分 支。

release分支基于develop,进行很简单的修改后就被合并到master,并打上tag,表示可以发布了。紧接着release将被合并 到develop;此时develop可能往前跑了一段,出现合并冲突,需要手工解决冲突后再次合并。这步完成后就删除release分支。

当从已发布版本中发现bug要修复时,就应用到hotfix分支了。hotfix基于master分支,完成bug修复或紧急修改后,要merge回master,打上一个新的tag,并merge回develop,删除hotfix分支。

由此可见release和hotfix的生命周期都较短,master/develop虽然总是存在但却不常使用。

以上就是gitflow的基本概念了。下面是nvie(gitflow的提出者,一个荷兰人!) A successful Git branching model(发布于2010年月5日)一文的笔记。

从右看起:

  • 时间轴。

  • feature(玫红)。主要是自己玩了,差不多的时候要合并回develop去。从不与master交互。

  • develop(黄色)。主要是和feature以及release交互。

  • release(绿色)。总是基于develop,最后又合并回develop。当然对应的tag跑到master这边去了。

  • hotfix(红色)。总是基于master,并最后合并到master和develop。

  • master(蓝色)。没有什么东西,仅是一些关联的tag,因从不在master上开发。

接下来nvie说道自己喜爱git,因git改变了人们对合并/分支(merge/branches)的看法。从集中式的代码管理工具过来的人感到 释放了(beware of merge conflicts, they bite you,注意合并冲突,它们会跳出来咬你!)。

gitflow实例

安装gitflow:

$ git clone --recursive git://github.com/nvie/gitflow.git$ cd gitflow/$ sudo make install
$ ls /usr/local/bin/git-flow/usr/local/bin/git-flow

到项目根目录下执行gitflow,因为之前修改没有commit,所以gitflow初始化失败:

$ git flow init
fatal: Working tree contains unstaged changes. Aborting.

commit后再次进行gitflow初始化:

$ git commit -a -m "update Bash"[master 8f5b874] update Bash
 4 files changed, 71 insertions(+), 5 deletions(-)[bailing@zhuji zhuji]$ git flow initWhich branch should be used for bringing forth production releases?
   - masterBranch name for production releases: [master] 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? []

一路回车下来,各个分支名都按默认的设置。最后,当前分支已经被切换到了develop:

$ git branch* develop
  master

建立一个新的feature。git flow新建了功能分支feature/blog_builder,并在develop的基础上checkout了新分支:

$ git flow feature start blog_builder
$ git branch
  develop* feature/blog_builder
  master

开发完成后执行如下命令:

$ git flow feature finish blog_builderSummary of actions:- The feature branch 'feature/blog_builder' was merged into 'develop'- Feature branch 'feature/blog_builder' has been removed- You are now on branch 'develop'

正如这条命令的总结所言,git flow为我们做了3件事:

  • 把feature/blog_builder合并到了develop。

  • 删除了feature/blog_builder分支。

  • 切换回develop分支。

接下来发布一个正常的版本:

$ git flow release start v0.5

一旦需要发布的版本确认无误可以发布后,执行命令:

$ git flow release finish v0.5summary of actions:- Latest objects have been fetched from 'origin'- Release branch has been merged into 'master'- The release was tagged 'v0.5'- Release branch has been back-merged into 'develop'- Release branch 'release/v0.5' has been deleted

注意release/v0.5被合并到了master和develop分支,并打了个v0.5的tag,然后被删除,最后切换回了develop分支:

$ git branch* develop
  master

发布时只需将tag为v0.5的版本checkout出来部署即可:

$ git tag
v0.5

当上线后发现v0.5的bug,可以进行hotfix:

$ git flow hotfix start v0.5.1

此时gitflow从master分支上拉出一个hotfix/v0.5.1的分支,接下来在新分支上修改bug。最后执行命令:

$ git flow hotfix finish v0.5.1

这样hotfix/v0.5.1被merge到master/develop分支,打好v0.5.1这个tag,删除这个分支,切换回develop分支。

之后又是新一次的轮回,启动正常的feature开发。


本文转载自:http://www.berlinix.com/it/gitflow.php

共有 人打赏支持
daniel-john
粉丝 17
博文 121
码字总数 56017
作品 0
其他
程序员
git-flow 分支管理模式其工具

很好用的工具,给出了很好的开发模式 安装: git clone git://github.com/nvie/gitflow.git cd gitflow git submodule init git submodule update sudo make install 简单使用: git flow init......

阿昭
2012/07/12
0
0
git工作流介绍--结合sourcetree

git工作流介绍--结合sourcetree git分布式版本控制系统 分布式是如何实现的: 服务器上有一个git仓库。完整地克隆服务器上的git仓库生成本地仓库。进行本地开发,开发完成后,提交到本地仓库...

sekaiga
2017/10/22
0
1
GitFlow分支模型下的代码全量格式化流程

全量格式化还是渐进格式化? 对于一个历史悠久又没有执行强制代码规范的代码库,全量格式化看起来是一件风险不可控的事情:它产生了大量的难以评估的格式改动,也使得格式化以后的代码库运行...

dev_csdn
04/08
0
0
对Git Flow做些微创新 (3)

昨天改完release分支的操作(http://www.jiangyouxin.net/2013/02/13/gitflow2.html)。现在只剩hotfix了,当然,之后我发现我改的还是release。 按照原始定义,hotfix其实和release很像,唯...

JiangYouxin
2013/02/15
0
0
VS Code 折腾记 - (13) VS Live Share (可提高效率的代码实时协作插件)的使用姿势

前言 这货憋了大半年.终于进入 beta 可用状态了....体验了一段时间后,该水文诞生了... 这货是什么,微软自家出的实时协作插件,什么是实时协作(有用过石墨文档或者腾讯文档的没?),差不多那样了...

CRPER
05/17
0
0
DaoCloud Services助力企业永葆活力

上海2016 年12月28日电 /美通社/ -- 近日,DaoCloud 推出 DaoCloud Services 2.0。DaoCloud Services是互联网时代的创新协作平台,旨在帮助企业打造符合互联网最佳实践的"DevOps”研发流,实...

玄学酱
04/24
0
0
轻量级支付整合轻松嵌入任何系统 - pay-java-parent

轻量级支付模块集成(微信支付,友店扫码,支付宝,富友,银联, payoneer皮卡 )支付整合,app,扫码,即时到帐刷卡付条码付、支持多种支付类型多支付账户,支付与业务完全剥离,简单几行代码即可实...

egzosn
2017/02/17
0
8
Ubuntu配置Python舒服的开发环境

Ubuntu 提供了一个良好的 Python 开发环境,但如果想使我们的开发效率最大化,还需要进行很多定制化的安装和配置。下面的是我们团队开发人员推荐的一个安装和配置步骤,基于 Ubuntu 12.04 桌...

quanpower
2014/08/27
0
0
【中奖名单公布】有奖征文004期 |从小白到大牛,进阶路上有话说?

终于!终于!激动人心的时刻要到来了!004期有奖征文:从小白到大牛,进阶路上有话说? 中奖名单要公布了!!!倒计时:3!2!1!……(ps:由于事关重大,请原谅小编的故弄玄虚) 【获奖名单...

慕课网官方_运营中心
06/12
0
0
Git Flow-基于git的源代码管理模型

Git Flow 是什么 Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践。Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化部分Git操作的...

唯慕清风
2015/08/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

TextView设置行间距、字体间距

一、设置行间距 1、设置行间距:android:lineSpacingExtra,取值范围:正数、负数和0,正数表示增加相应的大小,负数表示减少相应的大小,0表示无变化 2、设置行间距的倍数:android:lineSpa...

王先森oO
7分钟前
0
0
适配器模式

适配器模式(Adapter):将一个类的接口转换成客户端希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器用于连接两种不同种类的对象,使其毫...

阿元
7分钟前
0
0
CoreText进阶(四)-文字行数限制和显示更多

CoreText进阶(四)-文字行数限制和显示更多 用例和效果 Demo:CoreTextDemo 效果图: 默认的截断标识和自定义的截断标识符效果图  点击查看更多之后的效果图  为了可以设置显示的行数以...

aron1992
9分钟前
0
0
nginx的五种负载算法

nginx的五种负载算法 2017年04月26日 15:01:11 阅读数:1297 1.round robin(默认) 轮询方式,依次将请求分配到各个后台服务器中,默认的负载均衡方式。 适用于后台机器性能一致的情况。 挂...

linjin200
12分钟前
0
0
Android RecyclerView快速上手

RecyclerView mainMenu = findViewById(R.id.fragmentMain); mainMenu.setLayoutManager(new GridLayoutManager(getActivity(),4)); mainMenu.setAdapter(new MainAdapter......

燕归南
14分钟前
0
0
RabbitMQ实战:理解消息通信 

应用RabbitMQ的5种队列 一、简单队列 P:消息的生产者 C:消息的消费者 红色:队列 简单队列的生产者和消费者关系一对一 但有时我们的需求,需要一个生产者,对应多个消费者,那就可以采用第...

spinachgit
15分钟前
0
0
Linux的使用技巧:到底要不要会用?[图]

Linux的使用技巧:到底要不要会用?[图] 最近有个项目接近了尾声,要进入到调试测试阶段。这是一个使用Springboot框架为后台程序,mpvue构建的小程序项目。服务器我最终仍旧选择了Linux操作系...

原创小博客
16分钟前
0
0
记elasticdump 备份数据导出导入

版本: elasticsearch 5.5.2 elasticdump 2.2 系统 CentOS7.3 因项目需求 从生产导出一份索引到测试 帮助文档 https://github.com/taskrabbit/elasticsearch-dump?utm_source=dbweekly&utm_m......

雁南飞丶
17分钟前
0
0
saltstack配置目录管理

1.服务端配置 -接着编辑之前的 top.sls 文件 #vim /srv/salt/top.sls //修改为如下 base: 'slaver.test.com': - filedir -新建 filedir.sls 文件 # vim /srv/salt/filedir.sls file-dir: fi......

硅谷课堂
17分钟前
0
0
python日期时间

日期和时间 Python内建的datetime模块提供了datetime、date和time类型。datetime类型结合了date和time,是最常使用的: In [102]: from datetime import datetime, date, timeIn [103]:...

火力全開
24分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部