文档章节

gitflow分支管理模型

daniel-john
 daniel-john
发布于 2015/02/26 11:10
字数 1131
阅读 57
收藏 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

共有 人打赏支持
上一篇: rspec错误集锦
下一篇: Ruby中的inject
daniel-john
粉丝 17
博文 132
码字总数 56017
作品 0
其他
程序员
私信 提问
gitflow for windows的安装及初始化

gitflow简介 Git Flow是一套基于git的工作流程,这个工作流程围绕着project的发布(release)定义了一个严格的如何建立分支的模型。每一个特性(feature)的开发并不直接在主干上开发,而是在分支...

李佳明同学
2018/11/02
0
0
Git基本命令和GitFlow工作流

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

DR_WHO
2015/10/14
2
3
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
基于gitflow工作流的实践中,关于submodel的用法和管理有哪些?怎么才能融合到gitflow中?

基于nvie大神的gitflow工作流进行实践,项目中master分支有submodel,在fork到自己的账户下面以后没有办法进行submodel更新由此想到的问题是如何再工作流中应用git submodel? 原文链接 nvie...

MindFocus
2016/01/18
718
2
Git超实用总结,再也不怕记忆力不好了

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯工蜂发表于云+社区专栏 Git 是什么? Git 是一个分布式的代码管理容器,本地和远端都保有一份相同的代码。 Git 仓库主...

腾讯云加社区
2018/10/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7重置密码、单用户模式、救援模式、ls命令、chmod命令

在工作当中如果我们错误的配置了文件使服务器不能正常启动或者忘记密码不能登录系统,如何解决这些问题呢?重装系统是可以实现的,但是往往不能轻易重装系统的,下面用忘记密码作为例子讲解如...

李超小牛子
今天
3
0
Python如何开发桌面应用程序?Python基础教程,第十三讲,图形界面

当使用桌面应用程序的时候,有没有那么一瞬间,想学习一下桌面应用程序开发?行业内专业的桌面应用程序开发一般是C++,C#来做,Java开发的也有,但是比较少。本节课会介绍Python的GUI(图形用...

程序员补给栈
今天
5
0
kafka在的使用

一、基本概念 介绍 Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。 这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统...

狼王黄师傅
今天
3
0
Android JNI总结

0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大大增强。 JNI在Android中起着连接Java和C/C++层的作...

天王盖地虎626
昨天
3
0
大数据教程(11.8)Hive1.2.2简介&初体验

上一篇文章分析了Hive1.2.2的安装,本节博主将分享Hive的体验&Hive服务端和客户端的使用方法。 一、Hive与hadoop直接的关系 Hive利用HDFS存储数据,利用MapReduce查询数据。 二、Hive与传统数...

em_aaron
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部