Git flow是git的一个扩展集,它基于Vincent Driessen 的分支模型,文章“A successful Git branching model”对这一分支模型进行了描写叙述。其示意图例如以下:

上图从左往右看,分别为

- 时间轴。从上往下时间在流逝

- feature分支(玫红)。图上有两个feature分支,在这个分支上,进行功能特性的开发

- develop分支(黄色)。git flow的主分支。feature分支和release分支都会将代码合并到此分支上

- release分支(绿色),总是基于develop分支创建,最后合并到develop分支和master分支

- hotfix分支(红色),总是基于master分支创建,最后合并到master分支和develop分支

- master分支(蓝色),git flow的主分支,在开发的整个阶段一直存在,平时不在此分支开发,因此代码比較稳定,能够用来公布

Git flow的源代码能够通过下面链接下载:

https://github.com/nvie/gitflow

或者,直接输入下面命令安装git flow:

apt-get install git-flow

在Windows平台下安装git flow,能够參考《Windows环境下msysgit安装git flow》

我们能够通过下面命令来初始化一个现有的git本地仓库。

git flow init

接着回答几个关于分支的问题。不用操心。使用默认值就可以。直接按回车键。

No branches exist yet. Base branches must be created now

Branch 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?

[]

这样,便完毕了git flow的初始化工作。

在git flow 的分支模型中,有两个主分支masterdevelop,还有几个额外的分支来支持代码的版本号管理。下面先简要介绍一下这些分支的特点和git flow经常使用命令的使用。

1. Master

master分支仅仅有一个。

master分支上的代码总是稳定的。随时能够公布出去。

平时一般不在master分支上操作。当release分支和hotfix分支合并代码到master分支上时,master上代码才更新。

当仓库创建时,master分支会自己创建。

2. Develop

develop分支仅仅有一个。

新特性的开发是基于develop分支的,但不直接在develop分支上开发,特性的开发是在feature分支上进行。

当develop分支上的特性足够多以至于能够进行新版本号的公布时。能够创建release分支的。

3. Feature

能够同一时候存在多个feature分支。新特性的开发正是在此分支上面。

能够对每一个新特性创建一个新的feature分支,当该特性开发完毕,将此feature分支合并到develop分支。

创建一个新的feature分支。能够使用下面命令:

git flow feature start test

运行下面命令后,feature/test分支会被创建。

当特性开发完毕,须要将此分支合并到develop分支。能够使用下面命令实现:

git flow feature finish test

上面的命令会将feature/test分支的内容merge到develop分支,并将feature/test分支删除。

feature分支仅仅是存在于本地仓库,假设须要多个人共同开发此特性。也能够将feature分支推送到过程仓库。

git flow feature publish test

feature 分支的生命周期持续到特性的开发完毕,当完毕特性的开发。你能够使用git的分支管理命令将此feature分支删除。

4. Release

当完毕了特性的开发。而且将feature分支上的内容merge到develop分支上,这时能够開始着手准备新版本号的公布。release分支正是作为公布而开设的分支。

release分支基于develop分支,在同一时间仅仅有一个release分支,其生命周期较短。仅仅是为了公布而使用。这意味着,在release分支上,仅仅是进行较少代码改动,比方bug的修复,原有功能的完好等。

不同意在release分支添加大的功能。由于这样会导致release分支的不稳定,不利于公布的进行。

当release分支(比如,v.1.0)被创建出来后,develop分支可能正准备还有一版本号(比如。v.2.0),因此,当release分支merge回develop分支时,可能会出现冲突,须要手工解决冲突才干继续merge。

通过下面命令来创建release分支:

git flow release start v.1.0

运行过完上面的命令。release分支release/v.1.0会被创建出来 ,而且切换到该分支。

当完毕release分支功能的完好或者bug的修复后,运行下面命令来完毕release分支:

git flow release finish v.1.0

这个命令会运行下面的操作:

  • 分支release/v.1.0 merge回master分支
  • 使用release/v.1.0分支名称打tag
  • 分支release/v.1.0 merge回develop分支
  • 删除release/v.1.0分支

5. Hotfix

当发现master分支出现一个须要紧急修复的bug,能够使用hotfix分支。hotfix分支基于master分支。用来修复bug,当完毕bug的修复工作后,须要将其merge回master分支。

同一时间仅仅有一个hotfix分支,其生命周期较短。

能够使用下面命令来创建hotfix分支:

git flow hotfix start v.1.0

使用下面命令来结束hotfix分支的生命周期:

git flow hotfix finish v.1.0

这句命令会将hotfix分支merge到master分支和release分支,并删除该hotfix分支。

值得注意的是。假设bug修复时。正存在着release分支,那么hotfix分支会merge到release分支,而不是develop分支。

能够使用下图来说明git flow这几分支的经常使用命令:

在开发的整个阶段。仅仅有两个主分支贯穿于整个开发阶段:master分支和develop分支。

功能特性的开发以及bug的修复都通过创建新的分支来实现,且这些分支的生命周期都比較短暂。

开发成员之间的开发能够做到尽量不干扰对方。这保证了代码的稳定性。

git flow的分支模型简单清晰。易于使用。通过本文对git flow经常使用命令的介绍,你能够尽情享受它为我们管理代码带来的方便。

參考资料

  1. http://internetdevels.com/blog/git-flow-model
  2. http://danielkummer.github.io/git-flow-cheatsheet/index.zh_CN.html
  3. http://www.berlinix.com/it/gitflow.php

Git flow的分支模型与及经常使用命令简单介绍的更多相关文章

  1. git flow开发分支管理模型

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

  2. Git Flow 代码版本控制模型

    说到代码版本控制,推荐一下最新的Git.跟SVN相比,最大的区别是它在本地也保存了一个代码库,这样可以离线工作,首先将代码提交到本地仓库,联网之后再同步到服务器端.代码托管网站 Github 和 Bi ...

  3. 应用Git Flow—Git团队协作最佳实践

    规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高. 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢 ...

  4. Git Flow,Git团队协作最佳实践

    规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高, 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢 ...

  5. git flow分支管理

    阅读目录 两种核心分支 三种临时分支 Git Flow流程示例代码 Git Flow工具 分支命名规范 总结 git flow是Vincent Driessen提出了一个分支管理的策略,非常值得借鉴. ...

  6. git flow的使用

    简介 Gitflow工作流程围绕项目发布定义了严格的分支模型.尽管它比Feature Branch Workflow更复杂一些,但它也为管理更大规模的项目提供了坚实的框架. 与Feature Bran ...

  7. Windows环境下msysgit安装git flow

    git flow是git的一个扩展集,它基于Vincent Driessen的分支模型,能够用来简化代码的版本号公布流程. 本文讲述怎样为msysgit安装git flow. 下载getopt.exe ...

  8. 多人协作解决方案,git flow的使用

    简介 Gitflow工作流程围绕项目发布定义了严格的分支模型. 为不同的分支分配了非常明确的角色,并且定义了使用场景和用法.除了用于功能开发的分支,它还使用独立的分支进行发布前的准备.记录以及后期维护 ...

  9. 【git】之分支管理

    git是鼓励开发者使用分支,尤其是在大型开发项目中,分支是非常重要的!这里简单介绍一下分支的操作! 1.创建分支 git branch 没有参数,显示本地版本库中所有的本地分支名称. 当前检出分支的前 ...

随机推荐

  1. 个人软件过程(psp)需求分析

    个人软件过程(psp)需求分析 1.  引言 1.1  背景 开发项目进度计划不准确,延期经常出现,甚至无法给出一个比较准确的延迟时间,给市场推广带来很大麻烦. 2.  任务概述 2.1 目标 PSP ...

  2. Chromium浏览器编译成功庆祝

     1.什么是Chromium     Chromium 是Google公司的开源项目     Google浏览器  最新版360浏览器 都是在Chromium的基础上重新编译的. 2.什么是双核浏览器 ...

  3. sql server truncate table 删除表数据限制条件

    truncate 注释 注释TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快 ...

  4. ANNOTATION and analyse hello1.java

    一.What is annotation? annotation的中文意思就是注解,注释的意思.注解也属于一种类型.它是在 Java SE 5.0 版本中开始引入的概念.它的形式跟接口很类似,不过前面 ...

  5. 链表相关的leetcode重要题目

    Leetcode 92:反转链表II 解决这道题需要三个步骤: 找到需要反转的第一个节点.可以通过头节点前进m-1步,找到反转开始的位置. 将需要反转的部分进行反转.参考Leetcode 206:反转 ...

  6. 模板—splay

    #include<iostream> #include<cstdio> #define cin(x) scanf("%d",&x) using na ...

  7. P1048 采药

    题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个 ...

  8. <MySQL>入门七 存储过程和函数

    -- 存储过程和函数 /* 存储过程和函数:类似java中的方法 好处: 1.提高代码的重用性 2.简化操作 */ /* 存储过程 含义:一组预先编译好的SQL语句的集合.理解成批处理语句 1.提高代 ...

  9. Linux 安装 JDK 详解

    安装 JDK 说明:Linux 系统中安装软件需在 root 用户下进行. (1) 首先下载 jdk-8u131-linux-x64.rpm (2)将用户切换至 root,在 opt 文件夹下新建 s ...

  10. angular中处理多个异步请求的方法汇总

    在实际业务中经常需要等待几个请求完成后再进行下一步操作.但angularjs中$http不支持同步的请求. 解决方法一: $http多层嵌套 $http.get('url1').success(fun ...