Git flow action

就像代碼需要代碼規(guī)范一樣,代碼管理同樣需要一個清晰的流程和規(guī)范

Vincent Driessen 同學(xué)為了解決這個問題提出了 A Successful Git Branching Model

git-model_2x.png

上面的圖看著挺復(fù)雜的, 抽象出來的概念就是:

5個分支

項目里有2個永久分支:master和develop, 3個短期分支: feature, hotfix和release.

  • 永久分支

    • master分支
    • develop分支
  • 短期分支

    • feature分支, 功能開發(fā)分支, 派生于develop, 合并回develop
    • hotfix分支, bug修復(fù)分支, 派生于master, 合并回master和develop
    • release分支, 版本發(fā)布分支, 派生于develop, 合并回master和develop

未來所有的開發(fā)工作都圍繞這兩個永久分支來進(jìn)行: 從永久分支派生短期分支->合并回永久分支.
派生和合并的時機(jī)、源分支、目標(biāo)分支跟具體的開發(fā)類型有關(guān),Gitflow里有明確的規(guī)則.
短期分支,針對他們的工作內(nèi)容完成后,一般都要進(jìn)行刪除.
工作內(nèi)容完成的定義是個:開發(fā)完成, 合并完成, 缺一不可.

  • master

又稱為production(生產(chǎn)環(huán)境)分支, jenkins根據(jù)tag來拉取這個分支的代碼來打包, 這個分支只能從其他分支合并,不能在這個分支直接修改. 所有在master分支上的commit應(yīng)該打tag.

  • develop

這個分支是我們是我們的主開發(fā)分支, 包含所有要發(fā)布到下一個release的代碼, 這個主要合并于其他分支, 比如feature分支.

  • feature

這個分支主要是用來開發(fā)一個新的功能, 一旦開發(fā)完成, 我們合并回develop分支.
分支名為feature/*, 舉例:登錄功能命名為 feature/login
feature分支從develop派生而來, 開發(fā)完成后合并回develop. 一般這時會刪除這個feature分支.
可以有多個feature分支同時存在.

  • release

當(dāng)你需要一個發(fā)布一個新release的時候, 我們基于develop分支創(chuàng)建一個release分支, 我們可以在這個release分支上測試, 修改Bug(但是不要加新功能, 也不要從develop分支上合并新的改動到這個release分支), 完成這個release分支后, 我們合并到master和develop分支, 同時在master分支上打個tag記住release版本號, 然后刪除這個release分支.

  • hotfix

當(dāng)我們在線上發(fā)現(xiàn)一個需要緊急修復(fù)的bug時候, 我們需要從master分支派生一個hotfix, 完成hotfix后, 我們合并回master和develop分支, 所以hotfix的改動會進(jìn)入下一個release, 同時要在master上打一個tag.

實踐git-flow的方式

  • 安裝git-flow命令行工具, brew install git-flow , 通過命令行來操作, 比較難記.
  • 安裝sourcetree客戶端, 通過gui來操作(我們團(tuán)隊默認(rèn)做法)

sourcetree的git-flow實踐

初始化操作

sourcetree系統(tǒng)頂部欄->倉庫->git-flow或hg flow->初始化倉庫->確定(使用默認(rèn)命名)

本地自動增加了一個develop的分支, 加上gitlab倉庫默認(rèn)就會自動有的master分支. 把這兩個分支推送到遠(yuǎn)端倉庫, 兩個永久分支創(chuàng)建完成了.

開發(fā)新功能

sourcetree系統(tǒng)頂部欄->倉庫->git-flow或hg flow->建立新的功能
功能名稱填入英文, 比如login, 點確定.
sourcetree做了以下工作: 基于develop分支派生了feature/login分支, 本地切換到這個分支, 并推送到origin(遠(yuǎn)端).

完成功能

sourcetree系統(tǒng)頂部欄->倉庫->git-flow或hg flow-完成功能
在下拉框中選擇對應(yīng)的login功能. 點確定
sourcetree做了以下工作: 在本地把feature/login分支合并到develop分支, 然后刪除了本地feature/login, 切換到本地的develop分支.
然后在sourcetree上點擊推送按鈕, 推到origin(遠(yuǎn)端).

準(zhǔn)備發(fā)布

sourcetree系統(tǒng)頂部欄->倉庫->git-flow或hg flow-建立新的發(fā)布版本
在發(fā)布版本號里輸入 v1.0 , 點確定
sourcetree做了以下工作: 本地基于deveoper分支派生了release/v1.0分支, 本地切換到了這個分支.
然后在sourcetree上點擊推送按鈕, 推到origin(遠(yuǎn)端), 為了jenkins拉代碼用.

這個分支是為了上線做準(zhǔn)備的, 也是測試的對象, 我們可以用jenkins拉取它的代碼來出開發(fā)環(huán)境的包, 然后在這個分支上面修復(fù)bug(但別加新的feature).

完成發(fā)布

sourcetree系統(tǒng)頂部欄->倉庫->git-flow或hg flow-完成發(fā)布版本
在下拉框中選擇對應(yīng)的v1.0, 勾選刪除分支和推送變更到遠(yuǎn)程, 點確定
sourcetree做了以下工作: 本地合并release/v1.0分支到develop分支和master分支, 本地刪除了release/v1.0分支, 給master打了tag 'v1.0',

引用文章

A Successful Git Branching Model (git-flow提出者blog)

git-flow備忘清單

Git 在團(tuán)隊中的最佳實踐--如何正確使用Git Flow

SourceTree里GitFlow的使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容