Git Flow是構建在Git之上的一個組織軟件開發活動的模型,是在Git之上構建的一項軟件開發最佳實踐。Git Flow是一套使用Git進行源代碼管理時的一套行爲規範和簡化部分Git操做的工具。git
因此說,git-flow 是一個規則,一種約定,一種規範,並非什麼洪水猛獸, 是提升你使用git技術的一個進階實踐。app
因此,你必須先了解什麼是git的分支(branch).請看圖工具
由於時間關係,咱們假設你已經知道什麼是branch, git-flow就是經過在一個項目裏劃分不一樣的分支,來實現功能開發、bug修復、版本發佈,以及開發過程當中的衝突處理等。測試
(若是以爲這個描述有點繞,那麼暫時不用理解它。)網站
Master編碼
就是平時咱們看到的master,項目的主要分支,對外的第一門面。 全部外人瀏覽你的項目,使用你的項目,第一時間都是看到master。 你能夠把它理解成 穩定無bug發佈版 。(任什麼時候候都ready to deploy) 因此,git-flow 要求咱們不能在master下作開發。
Developspa
處於功能開發最前線的版本,查看develop分支就能知道下一個發佈版有哪些功能了。 develop一開始是從master裏分出來的,而且按期會合併到master裏, 每一次合併到master,表示咱們完成了一個階段的開發,產生一個穩定版。 一樣的,develop下也不建議直接開發代碼,develop表明的是已經開發好的功能 的迴歸版本(爲何說迴歸?)
Feature插件
帶着develop處的疑問,咱們在feature裏爲你解答。(有點長,別不看) feature的做用是爲每個新功能從develop裏建立出來的一個分支。 例如小明和小白分別作兩個不相干的功能,就應該分別建立兩個分支, 各自開發完之後,前後合併到develop裏,這就叫作迴歸。 在這個過程裏,小明小白不須要任何的溝通,分別並行地開發, git-flow能很好的處理好分支間並行開發的關係。 而develop,則會在適當的時候,由合適的人,合併到master,做爲下一個穩定版本。
Hotfix命令行
以上3種之外,還有一個很重要的類型,hotfix。 它是用來修復緊急bug的,而bug一般是來自線上的, 因此hotfix分支是從master裏建立出來的,而且,在bug修改好之後, 要同時合併到master和develop,這一點須要特別注意。
Release
release更多傾向與版本發佈,項目上線前的一些全面測試以及上線準備。 一樣也肩負着版本歸檔,回滾支持等。
上面說到了,git-flow本質只是一個約定,因此你徹底能夠在現行的git命令行裏, 手動地完成所有git-flow操做,(手動建立、合併分支等), 重點是遵照git-flow規範,遵照命名約定和分支管理流程。
不過,git-flow早就有插件了。參看這個文章:
http://blog.163.com/tod_zhang/blog/static/1025522142012913113957679/
安裝了這個插件,你的git就多了一系列方便的命令,好比:
git flow init
git flow feature start
git flow feature finish
等等。
不過,我以爲這個插件仍是不夠方便,我牆裂推薦大家都用 SourceTree 。
若是我要推薦一個git-flow客戶端,我會推薦SourceTree。
若是我要推薦一個git客戶端,那我仍是推薦SourceTree。
沒錯,SourceTree是專門爲git-flow開發的git客戶端,它涵蓋了全部git自己的功能,
因此即便你不flow,你也可使用SourceTree來管理你的git項目。
官方網站:
至於如何下載、安裝、/* 破解 */ ,這些內容就交給各位自行baidu了。
那麼下面咱們來實際操做一次,看看SourceTree如何幫助咱們使用git-flow
1.小明建立了一個新項目,就作 Demo,而且用SourceTree來打開它。若是這一步都 不會,你仍是別作開發了。
(一個新的項目,就不發圖了)
2.小明爲了使用git-flow,須要爲git項目作一次初始化。
這些能夠改動的地方,爲了方便其餘協做人員,仍是用默認好了。
3.初始化後,會自動切換到develop分支,接下來,小明要發一個新功能
注意那個 Git Flow 按鈕,全部flow的功能都是從那裏開始操做的。 在彈出的窗口裏輸入功能的名字便可,小明決定開發一個 test1 功能。
這時,左側的菜單已經看到分支切換到test1了(有加粗效果)
4.而後小明開始了暗無天日的編碼過程,千辛萬苦後寫了一行readme
接下來咱們演示一下如何提交修改
這個界面十分清晰地告訴你本地沒有commit的代碼,
固然了,這僅僅是commit到本地,由於這始終是git,咱們還須要push到遠端。
能夠在左側看到,咱們暫存了多少個commit。 按照圖上流程,選擇你要push 的分支,你也能夠一次選擇多個, 在這裏咱們先push 功能分支test1 。
5.提交過幾回代碼以後,小明認爲功能已經開發完畢,能夠迴歸到develop了
注意,這個時候,只有test1的代碼是改變了的,develop仍是停留在小明建立feature時的狀態。
爲了安全起見,每次合併以前,最好pull一下develop,再次不表。(SourceTree拉取)
那麼咱們如今把開發好的test1合併到develop:
整個界面很簡單,就一個操做,實際上,它背後作了不少。 (@ -_-)
如無心外,test1裏的改動會合併到develop裏,而且會刪除本地的test1,
而後把分支切換到develop,這時候咱們應該能看到整個test1期間的變更數目:
接下來你應該當即把develop的改動push到遠端!
OK,這就是一個功能開發的完整流程,就算有多個功能在並行開發,
經過git-flow的協調,都能互不干擾地開發,最終所有做用到develop上。