前一篇介紹了 git相關的概念,咱們能夠查看文件的狀態,在各個狀態之間進行切換,能夠建立和合並分支,經過rebase還能夠整理本身的提交歷史。經過這些命令和操做,就可完成工做流規範規定的操做流程了。git
本篇介紹具體的規範,包括分支的劃分和命名規範,不一樣類型的分支應對不一樣的場景,而後會介紹下工做流工具git-flow,如何簡化咱們的操做。服務器
master和develop分支一直存在,且名稱不會變化,通常不直接修改這2個分支,由其餘分支合併而來。session
feature、release、hotfix分別用於功能點開發、優化,特定版本測試,線上問題緊急處理,同一類型的分支會產生多個。分佈式
分支劃分以下:工具
命名規範約定以下:post
好比有一個「優化分佈式Session」的需求,可在develop分支的基礎上建立新分支 feature/optimize_distributed_session進行開發,開發完成後合併到develop分支。測試
主分支,與線上運行的版本始終保持一致,任什麼時候候都不要直接修改master分支。優化
一個版本的release分支、hotfix分支開發完成後,會合並代碼到master分支,也就是說master分支主要來源於release分支和hotfix分支。命令行
開發分支,始終保持最新完成以及bug修復後的代碼,新增功能時基於該分支建立feature分支。cdn
一個版本的release分支、hotfix分支開發完成後,也會合併到develop分支,另外,一個版本的feature功能開發完成後,也會合併到develop分支。也就是說develop分支來源於feature、release、hotfix分支。
開發新功能或優化現有功能時,會建立feature分支,以develop爲基礎建立。通常會有多個功能同時開發,但上線時間可能不一樣,在適當的時候將特定的feature分支合併到develop分支,並建立release分支,進入測試狀態。
當一組feature開發完成,會首先合併到develop分支,開始進入提測階段時,會建立release分支。
以release分支代碼爲基準提測,測試過程當中若存在bug須要修復,則直接由開發者在release分支修復並提交。
測試完成以後,合併release分支到master和develop分支,此時master爲最新代碼,用做上線。
線上出現緊急問題時,須要及時修復,以master分支爲基線,建立hotfix分支,修復完成後,須要合併到master分支和develop分支。
develop分支已存在未上線的feature代碼, 此時須要緊急上線一個新功能, 但develop的代碼不能上,如何處理 ?
以develop爲基線,建立了f1和f2兩個feature分支以後, f1,f2開發一半的時候,發現兩個分支代碼須要有依賴怎麼辦 ?
必定要保證commit歷史記錄的整潔,代碼合併時,根據狀況選擇merge或rebase;
使用rebase注意,一旦分支中的提交對象發佈到公共倉庫,就千萬不要對該分支進行衍合操做;
提交說明規範:
上面的流程在第一次接觸時,會以爲有點複雜,經過git-flow工具能夠把這些流程自動化。它是一個命令行工具,支持各個平臺,好比OSX、Linux、Windows等支持。
經過 git flow init 命令進行初始化,以交互式的方式進行,主要是約定分支的命名,建議使用默認值;
git flow feature start f1 添加新特性,這個操做建立了一個基於develop的特性分支,並切換到這個分支之下。
git flow feature finish f1 完成新特性,這個操做會合並f1分支到develop分支,並刪除特性分支,切換回develop分支。
git flow feature publish f1 發佈新分支,發佈新特性分支到遠程服務器,其它用戶也可使用這分支。
git flow release start r1 [BASE] 建立發佈版本,[BASE]是以哪一個分支或commit爲基礎進行發版,通常爲develop。
git flow release publish r1 發佈release分支,其餘同事就能夠看到這個分支,並修改一些小問題。
git flow release finish r1 完成release分支,會合並release分支到master分支,用release分支名打Tag,合併release分支到 develop分支,最後移除release分支。
有可能須要修正 master 分支上某個 TAG 標記的生產版本。
git flow hotfix start VERSION [BASENAME] 建立hotfix分支,VERSION 參數標記着修正版本,[BASENAME]爲finish release時填寫的版本號。
git flow hotfix finish VERSION,當完成緊急修復分支,代碼合併到develop和 master分支。相應地,master分支打上修正版本的 TAG。