天天看点

rdc最佳实践之开发模式——git flow

今天新建项目的时候,发现<code>rdc</code>除原有的<code>分支模式</code>以外还增加了<code>master分支开发模式</code>和<code>git flow模式</code>,这是一件非常令人欣喜的事情——毕竟<code>git flow</code>是一个流传已久的,大家都普遍接受的开发模式。

于是我就把应用删掉了,改用<code>git flow</code>模式,目前体验很完美。

鉴于很多人可能还不太了解<code>git flow</code>,本文就对此分享一些微小的经验。

你会用git吗?

我相信在座的大多数人都会自信的回答:“会”。

而实际上,大家可能从来没有考虑过自己的用法是否真的科学,真的健壮,尤其是项目越来越大,人数越来越多,周期越来越长的时候。

其中,典型的有以下几个问题:

当我开发某个功能到一半的时候,pm突然给我安排了一个新的紧急任务,我该怎么开始这个任务,而不影响现在的?

当我代码写好了的时候,如何发布?

当我发布后,代码出问题了,如何快速修复?

以上的情况,还要求修复后,还要包含之后开发的所有代码?

大部分开发人员使用git的时候,基本只使用两个甚至一个分支,所以下面的这些理念,显然是打开了一扇新世界的大门了。

显然,不光代码有代码规范,代码的管理和协同同样需要一个清晰的流程和规范,由此,行业内的通用解决方案是<code>git flow</code>。

rdc最佳实践之开发模式——git flow

怎么样,眼花缭乱吧,不过我可以给你个建议:把头左转90度,别着急骂....这是<code>office picture</code>,并非我画的。

在上面这幅图上,最上面的一行,代表分支,它们分别是

名称

解释

master

这个分支最近发布到生产环境的代码,最近发布的release, 这个分支只能从其他分支合并,不能在这个分支直接修改

develop

这个分支是我们是我们的主开发分支,包含所有要发布到下一个release的代码,这个主要合并与其他分支,比如feature分支

feature

这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回develop分支进入下一个release

release

当你需要一个发布一个新release的时候,我们基于develop分支创建一个release分支,完成release后,我们合并到master和develop分支

hotfix

当我们在production发现新的bug时候,我们需要创建一个hotfix, 完成hotfix后,我们合并回master和develop分支,所以hotfix的改动会进入下一个release.

在master分枝上工作,我们需要遵循一个基本原则,所有在<code>master</code>分支上的<code>commit</code>应该<code>tag</code>.

rdc最佳实践之开发模式——git flow

<code>feature</code>分支做完后,必须合并回<code>develop</code>分支, 合并完分支后一般会删点这个<code>feature</code>分支,但是我们也可以保留

rdc最佳实践之开发模式——git flow

开始一个新的功能的开发

开发完成

分支名 release/*

<code>release</code>分支基于<code>develop</code>分支创建,打完<code>release</code>分支后,我们可以在这个<code>release</code>分支上测试,修改<code>bug</code>等。同时,其它开发人员可以基于开发新的<code>feature</code>,一旦打了<code>release</code>分支之后不要从<code>develop分支上合并新的改动到release分支</code>

发布<code>release</code>分支时,合并<code>release</code>到<code>master</code>和<code>develop</code>, 同时在<code>master</code>分支上打个<code>tag</code>记住<code>release</code>版本号,然后可以删除<code>release</code>分支了(当然,你可以选择不删除)。

rdc最佳实践之开发模式——git flow

开始release

完成release

分支名 hotfix/*

<code>hotfix</code>分支基于<code>master</code>分支创建,开发完后需要合并回<code>master</code>和<code>develop</code>分支,同时在<code>master</code>上打一个<code>tag</code>

rdc最佳实践之开发模式——git flow

开始hotfix

完成hotfix

如果你能坚持看到这里,我真的为你感到欣喜,这说明你是用心学习的,并且是不畏艰险的,毕竟上面那么长的一大串的代码,可能已经使你感到畏惧。

而显然的是,作为通用的一个解决方案,不可能这么繁琐,那么,唯一的可能是——有!工!具!

平台

命令

os x

brew install git-flow

linux

apt-get install git-flow

windows

bash

idea

git flow integration

其中还有一大部分是gui的,比较简单,本文就不再赘述了。下面着重介绍下命令行下的使用

初始化: git flow init

开始新feature: git flow feature start myfeature

publish一个feature(也就是push到远程): git flow feature publish myfeature

获取publish的feature: git flow feature pull origin myfeature

完成一个feature: git flow feature finish myfeature

开始一个release: git flow release start release [base]

publish一个release: git flow release publish release

发布release: git flow release finish release

别忘了git push --tags

开始一个hotfix: git flow hotfix start version [basename]

发布一个hotfix git flow hotfix finish version

仔细观察,这些命令都是有规矩的,它们大概可以如下图表示

rdc最佳实践之开发模式——git flow

继续阅读