從svn遷移到git了 , 補充一下git的知識和Git Flow在團隊中的應用
Git主要優點有
- 分佈式存儲 , 本地倉庫包含了遠程倉庫的所有內容 . 安全性高 , 遠程倉庫文件丟失了也不怕
- 優秀的分支模型 , 創建/合併分支非常的方便
- 方便快速 , 由於代碼本地都有存儲 , 所以從遠程拉取和分支合併時都非常快捷
當分支過多時 , 如何管理這些分支呢 ? 我們團隊採用了Git Flow的模式
GitFlow的常用分支
master
- 主分支 , 產品的功能全部實現後 , 最終在master分支對外發布
- 該分支爲只讀唯一分支 , 只能從其他分支(release/hotfix)合併 , 不能在此分支修改
- 另外所有在master分支的推送應該打標籤做記錄,方便追溯
- 例如release合併到master , 或hotfix合併到master
develop
- 主開發分支 , 基於master分支克隆
- 包含所有要發佈到下一個release的代碼
- 該分支爲只讀唯一分支 , 只能從其他分支合併
- feature功能分支完成 , 合併到develop(不推送)
- develop拉取release分支 , 提測
- release/hotfix 分支上線完畢 , 合併到develop並推送
feature
- 功能開發分支 , 基於develop分支克隆 , 主要用於新需求新功能的開發
- 功能開發完畢後合到develop分支(未正式上線之前不推送到遠程中央倉庫!!!)
- feature分支可同時存在多個 , 用於團隊中多個功能同時開發 , 屬於臨時分支 , 功能完成後可選刪除
release
- 測試分支 , 基於feature分支合併到develop之後 , 從develop分支克隆
- 主要用於提交給測試人員進行功能測試 , 測試過程中發現的BUG在本分支進行修復 , 修復完成上線後合併到develop/master分支並推送(完成功能) , 打Tag
- 屬於臨時分支 , 功能上線後可選刪除
hotfix
- 補丁分支 , 基於master分支克隆 , 主要用於對線上的版本進行BUG修復
- 修復完畢後合併到develop/master分支並推送 , 打Tag
- 屬於臨時分支 , 補丁修復上線後可選刪除
- 所有hotfix分支的修改會進入到下一個release
主要工作流程
1 . 初始化項目爲gitflow , 默認創建master分支 , 然後從master拉取第一個develop分支
2 . 從develop拉取feature分支進行編碼開發(多個開發人員拉取多個feature同時進行並行開發 , 互不影響)
3 . feature分支完成後 , 合併到develop(不推送 , feature功能完成還未提測 , 推送後會影響其他功能分支的開發)
合併feature到develop , 可以選擇刪除當前feature , 也可以不刪除 . 但當前feature就不可更改了 , 必須從release分支繼續編碼修改
4 . 從develop拉取release分支進行提測 , 提測過程中在release分支上修改BUG
5 . release分支上線後 , 合併release分支到develop/master並推送
合併之後 , 可選刪除當前release分支 , 若不刪除 , 則當前release不可修改 . 線上有問題也必須從master拉取hotfix分支進行修改
6 . 上線之後若發現線上BUG , 從master拉取hotfix進行BUG修改
7 . hotfix通過測試上線後 , 合併hotfix分支到develop/master並推送
合併之後 , 可選刪除當前hostfix , 若不刪除 , 則當前hotfix不可修改 , 若補丁未修復 , 需要從master拉取新的hotfix繼續修改
8 . 當進行一個feature時 , 若develop分支有變動 , 如其他開發人員完成功能並上線 , 則需要將完成的功能合併到自己分支上
即合併develop到當前feature分支
9 . 當進行一個release分支時 , 若develop分支有變動 , 如其他開發人員完成功能並上線 , 則需要將完成的功能合併到自己分支上
即合併develop到當前release分支 (!!! 因爲當前release分支通過測試後會發佈到線上 , 如果不合並最新的develop分支 , 就會發生丟代碼的情況)
引自大神的Git Flow 工作流程圖
不喜歡命令行的同學 , 這裏有完美支持Git Flow的圖形化工具 - SourceTree(支持中文簡體)