淺談GitFlow


想真正弄明白GitFlow的奧秘,推薦一篇博客和一個GitHub項目。但大多數情況,讀懂這張圖就可以了,這是一張非常經典的GitFlow流程圖。

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

書面的東西還有很多,在此就不提了。首先大家需要了解的就是GitFlow為開發生成的幾個分支。

GitFlow模型中定義了主分支和輔助分支。其中主分支用於組織與軟件開發、部署相關的活動;輔助分支組織為了解決特定的問題而進行的各種開發活動。

主分支

主分支是所有開發活動的核心分支。所有的開發活動產生的輸出物最終都會反映到主分支的代碼中。主分支分為master分支和development分支。

  1. master分支

master分支顧名思義就是最主要的分支,在這個分支上面應該是隨時可供在生產環境中部署的代碼,同是也是整個項目的主線。當開發進行到一定程度,都會更新一份新的可部署代碼,每一次更新,最好添加對應的版本號標簽(TAG)。

master分支作為主分支,上面代碼是隨時可以打包發布的代碼版本,tag一般都是1.0、2.0之類的標識。

  1. develop分支

develop分支是保存當前最新開發成果的分支。通常這個分支上的代碼也是可進行每日夜間發布的代碼已經實現了軟件需求說明書中所有的功能,通過了所有的測試后,並且代碼已經足夠穩定時,就可以將所有的開發成果合並回master分支了。

develop是幾乎和master分支齊頭並進的開發分支,當沒有需求的時候也就是需求完成的時候,兩個分支應該是一樣的。開發時,我們會為不同的需求創建不同的feature分支進行開發,開發完成后我們會將feature分支(可能有好幾個)合並到dev分支,然后進行測試,全部測試完成后,合並到master然后發布。

輔助分支

輔助分支是用於組織解決特定問題的各種軟件開發活動的分支。輔助分支主要用於組織軟件新功能的並行開發、簡化新功能開發代碼的跟蹤、輔助完成版本發布工作以及對生產代碼的缺陷進行緊急修復工作。這些分支與主分支不同,通常只會在有限的時間范圍內存在。

輔助分支包括:用於開發新功能時所使用的feature分支;用於輔助版本發布的release分支;用於修正生產代碼中的缺陷的hotfix分支。以上這些分支都有固定的使用目的和分支操作限制。從單純技術的角度說,這些分支與Git其他分支並沒有什么區別,但通過命名,我們定義了使用這些分支的方法。

  1. feature分支

使用規范:可以從develop分支發起feature分支,代碼必須合並回develop分支,feature分支的命名可以使用除master、develop、release-、hotfix-之外的任何名稱。

feature分支通常是在開發一項新的軟件功能的時候使用,這個分支上的代碼變更最終合並回develop分支或者干脆被拋棄掉(例如實驗性且效果不好的代碼變更)。一般而言,feature分支代碼可以保存在開發者自己的代碼庫中而不強制提交到主代碼庫里。

  1. release分支

使用規范:可以從develop分支派生,必須合並回develop分支和master分支,分支命名慣例:release-*。

release分支是為發布新的產品版本而設計的。在這個分支上的代碼允許做小的缺陷修正、准備發布版本所需的各項說明信息(版本號、發布時間、編譯時間等等)。通過在release分支上進行這些工作可以讓develop分支空閑出來以接受新的feature分支上的代碼提交,進入新的軟件開發迭代周期。

當develop分支上的代碼已經包含了所有即將發布的版本中所計划包含的軟件功能,並且已通過所有測試時,我們就可以考慮准備創建release分支了。而所有在當前即將發布的版本之外的業務需求一定要確保不能混到release分支之內(避免由此引入一些不可控的系統缺陷)。

成功的派生了release分支,並被賦予版本號之后,develop分支就可以為“下一個版本”服務了。所謂的“下一個版本”是在當前即將發布的版本之后發布的版本。版本號的命名可以依據項目定義的版本號命名規則進行。

  1. hotfix分支

使用規范:可以從master分支派生,必須合並回master分支和develop分支,分支命名慣例:hotfix-*。

除了是計划外創建的以外,hotfix分支與release分支十分相似:都可以產生一個新的可供在生產環境部署的軟件版本。

當生產環境中的軟件遇到了異常情況或者發現了嚴重到必須立即修復的軟件缺陷的時候,就需要從master分支上指定的TAG版本派生hotfix分支來組織代碼的緊急修復工作。

這樣做的顯而易見的好處是不會打斷正在進行的develop分支的開發工作,能夠讓團隊中負責新功能開發的人與負責代碼緊急修復的人並行的開展工作。

參考文獻
gitflow的github: https://github.com/nvie/gitflow
githook官方文檔:https://www.git-scm.com/book/zh/v2/自定義-Git-Git-鈎子
https://www.jianshu.com/p/1d8da713316e
https://blog.csdn.net/u010658879/article/details/50975084
https://www.jianshu.com/p/f3d17c11bb8a
SourceTree的基本使用
https://nvie.com/posts/a-successful-git-branching-model/


免責聲明!

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



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