关于git flow

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

git flow分支模型

图片.png

上图从左往右看,分别为

  • 时间轴,从上往下时间在流逝

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

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

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

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

  • master分支(蓝色),git flow的主分支,在开发的整个阶段一直存在,平时不在此分支开发,因此代码比较稳定,可以用来发布

<2> 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的初始化工作。

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

  • ①. Master

master分支只有一个。

master分支上的代码总是稳定的,随时可以发布出去。

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

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

  • ②. Develop

develop分支只有一个。

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

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

  • ③. 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分支删除。

  • ④. 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分支

  • ⑤. 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这几分支的常用命令:

git flow commands


结束语:
在开发的整个阶段,只有两个主分支贯穿于整个开发阶段:master分支和develop分支。功能特性的开发以及bug的修复都通过创建新的分支来实现,且这些分支的生命周期都比较短暂。开发成员之间的开发可以做到尽量不干扰对方,这保证了代码的稳定性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 Git Flow介绍 我们都知道, 在 git 的分支功能相对 svn 确实方便许多,而且也非常推荐使用分支来...
    七寸知架构阅读 12,405评论 20 68
  • 初始化配置 C代码 收藏代码 配置使用git仓库的人员姓名 git config --global user.n...
    Yepku阅读 1,252评论 0 0
  • 一、今日学习 1.今晚的网络课没有时间上,无其他内容学习。 二、训练的项目和成绩 1.记忆扑克牌1次,正常发挥。 ...
    世话实说阅读 1,477评论 0 0
  • ​炎炎夏日,空调送来清凉给了我们生命,用时也带走了肌肤水分。 丢掉空调是不可能了,那就老老实实做好保湿吧! 多给肌...
    哆咗阅读 3,541评论 0 7
  • 有没有一个名字 只要想起 就会莫名的心痛 有没有一个名字 只要想起 就会想忘记此生 那个名字 是前世的牵绊 是今世...
    蓝天下永恒的流星阅读 1,846评论 0 0

友情链接更多精彩内容