天天看點

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

繼續閱讀