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

2022-05-14 01:55:31 字數 3236 閱讀 8172

git flow是構建在git之上的乙個組織軟體開發活動的模型,是在git之上構建的一項軟體開發最佳實踐。git flow是一套使用git進行源**管理時的一套行為規範和簡化部分git操作的工具。
( )

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

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

因為時間關係,我們假設你已經知道什麼是branch, git-flow就是通過在乙個專案裡劃分不同的分支,來實現功能開發、bug修復、版本發布,以及開發過程中的衝突處理等。

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

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早就有外掛程式了。參看這個文章:

安裝了這個外掛程式,你的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專案。

官方**:

那麼下面我們來實際操作一次,看看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上。

關於GIT Flow的學習理解

git的分支處理模型,真的很爽,但關於如何對git的分支進行管理?最近有給我提到了git flow,呵呵,按照我的理解,應該是git的乙個最佳實踐吧,原文a successful git branching model對git的分支模型作了闡述,以下我對該文章進行自己的翻譯和理解,聊以日後學習,首先...

學習解析xml檔案以及心得

今天的工作很簡單,基本與目前開發的專案無關,主要是將乙個xml檔案解析,提取內容拼接成sql語句。難點在於裡面的層級比較多,如果靠以下的語句一層一層的讀取,將巢狀多層for迴圈,影響效率,且容易讀取出錯。讀取外層entity element elementrootelement element en...

學習筆記 Python XML解析

xml.sax 菜鳥教程 官網文件 python由xml包 lib xml 提供對xml的支援。python處理xml主要有兩種模型,xml.dom和xml.sax分別定義了兩種處理模型的介面 the xml handling submodules are 手冊 inte ce section pu...