集中式工作流
基於master分支開發
流程:
- 創建origin/master分支
- 協作開發者A、B把origin/master 分支clone到本地
- 協作開發者A、B在本地master分支進行開發
- A開發完push到遠程master分支
- B開發完push到遠程master分支
衝突處理
push時本地代碼與遠程master有分歧時推不上去,用git pull --rebase origin master
把遠程master的代碼與本地代碼進行合併同步,如果merge的過程中存在CONFLICT,解決完conflict再push到master。
重點
- 每次開發前都從origin/master 分支先pull一下
- 提交之前也 git pull --rebase
功能分支工作流
功能分支工作流開發工工作在特性分支開發,在最終合併到master之前不會影響master分支的代碼,保證了master分支可以作爲一個穩定的可發佈版本。
流程
- 確定開發的功能後以master爲基礎創建一個功能分支 例如 dev
git checkout -b dev master
- 在特性分支上進行開發,開發之後push到中央倉庫的功能分支,其他人也可以提交到該功能分支
- 該功能分支開發完成之後,提交一個pull request請求合併到master,項目成員進行討論
- pull request合併後該分支刪除
git checkout master git pull git pull origin dev git push
重點
- 功能分支與master主分支在同一個中央倉庫
- pull request進行code review
- 互不影響,多個功能同時開發
- 合併分支的時候,加上 no-ff 參數
Git flow 工作流
Gitflow 工作流,擴展了集中式工作流與功能分支工作流。包含 開發分支devleop,特性分支 feature-xx,發行分支release-xx,維護分支 master,修復分支 hotfix
流程
- 項目創建的時候同時創建master和develop分支
- 項目成員clone把項目到本地
- 開發feature的時候以develop進行checkout
git checkout -b develop origin/develop
- feature 開發完後發起 pull request合併到到develop
- 版本開發完成後準備發行,以develop創建一個release-xx發行分支
- release發行完成,把release-xx合併到維護分支master,並打上tag標籤
- 發行後修改bug,以master分支checkout一個hotfix-xx分支,修改後合併到master分支,同時要合併到develop分支。
重點
- 各分支的意義
- feature (多個) 主要是自己玩了,差不多的時候要合併回 develop 去。不與 master 交互。
- develop (同時間一個) 主要是和 feature 以及 release 交互
- release (同時間一個) 總是基於 develop,最後又合併回 develop。當然對應的 tag 要合併到 master 分支,生命週期短,僅是爲了發佈程序
- hotfix (同一時間一個) 總是基於 master,並最後合併到 master 和 develop。生命同期較短,用來修復 bug 或小粒度修改發佈
- master (僅一個) 關聯 tag 和發佈
- 特性分支都是基於開發分支develop
- 發行分支創建好之後,要修改部分內容要往release分支合併
- 發行後的維護需要從master 進行checkout
Forking 工作流
把中央倉庫fork到自己的代碼倉庫,在自己的代碼倉庫開發,完了之後提交pull request 合併到中央倉庫的主分支
流程
- fork
- git remote add
- pull request
重點
- Forking工作流的一個主要優勢是,貢獻的代碼可以被集成,而不需要所有人都能push代碼到僅有的中央倉庫中。
開發者push到自己的服務端倉庫,而只有項目維護者才能push到正式倉庫。
GitHub Flow
GitHub Flow 推薦做法是隻有一個主分支 master,團隊成員們的分支代碼通過 pull Request 來合併到 master 上
GitHub Flow 模型簡單說明
- 只有一個長期分支 master ,而且 master 分支上的代碼,永遠是可發佈狀態,一般 master 會設置 protected 分支保護,只有有權限的人才能推送代碼到 master 分支。
- 如果有新功能開發,可以從 master 分支上檢出新分支。
- 在本地分支提交代碼,並且保證按時向遠程倉庫推送。
- 當你需要反饋或者幫助,或者你想合併分支時,可以發起一個 pull request。
- 當 review 或者討論通過後,代碼會合併到目標分支。
- 一旦合併到 master 分支,應該立即發佈。
特色之 Pull Request
GitHub Flow 最大的特色就是 Pull Request 的提出,這是一個偉大的發明,它的用處並不僅僅是合併分支,還有以下功能:
-
可以很好控制分支合併權限。
-
分支不是你想合併就合併,需要對方同意吶
-
問題討論 或者 尋求其他小夥伴們的幫助。
和拉個討論組差不多,可以選擇相關的人蔘與,而且參與的人還可以向你的分支提交代碼,可以說,是非常適合代碼交流了。 -
代碼 Review 。
如果代碼寫的很爛,有了 pull request 提供的評論功能支持,準備好接受來自 review 的實時吐槽吧。當然你如果寫的很棒,肯定也能被雙擊666的。
特色之 issue tracking 問題追蹤
日常開發中,會用到很多第三方庫,然後使用過程中,出現了問題,是不是第一個反應是去這個第三方庫的 GitHub 倉庫去搜索一下 issue ,看沒有人遇到過,項目維護者修復了沒有,一般未解決的 issue 是 open 狀態,已解決的會被標記爲 closed。這就是 issue tracking。
如果你是一個項目維護者,除了標記 issue 的開啓和關閉,還可以給它標記上不同的標籤,來優化項目。當提交的時候,如果提交信息中有 fix #1 等字段,可以自動關閉對應編號的 issue。
Gitlab flow
集百家之長,推薦使用
團隊配合
一個版本劃分爲主線和輔線,A負責主線開發,B負責輔線和線上bug修復,下個版本互換,A負責輔線和線上bug修復,B負責主線開發