學習筆記:gitflow解析以及工具使用


轉自: http://lanhao.name/282 (謝謝樓主分享)

git-flow,是一個工具,是一種規范

Git Flow是構建在Git之上的一個組織軟件開發活動的模型,是在Git之上構建的一項軟件開發最佳實踐。Git Flow是一套使用Git進行源代碼管理時的一套行為規范和簡化部分Git操作的工具。

( http://www.ituring.com.cn/article/56870 )

所以說,git-flow 是一個規則,一種約定,一種規范,並不是什么洪水猛獸, 是提高你使用git技術的一個進階實踐。

git-flow 基於git本身的分支管理機制

所以,你必須先了解什么是git的分支(branch).請看圖

因為時間關系,我們假設你已經知道什么是branch, git-flow就是通過在一個項目里划分不同的分支,來實現功能開發、bug修復、版本發布,以及開發過程中的沖突處理等。

(如果覺得這個描述有點繞,那么暫時不用理解它。)

git-flow把分支划分了幾個類別

Master

就是平時我們看到的master,項目的主要分支,對外的第一門面。
所有外人瀏覽你的項目,使用你的項目,第一時間都是看到master。
你可以把它理解成  穩定無bug發布版 。(任何時候都ready to deploy)
所以,git-flow 要求我們不能在master下做開發。

Develop

處於功能開發最前線的版本,查看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項目。

官方網站:

https://www.sourcetreeapp.com/

至於如何下載、安裝、/ 破解 / ,這些內容就交給各位自行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上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM