Bo2SS

Bo2SS

7 使用GitHub進行團隊協作

47 | 創建團隊的項目#

在創建倉庫時,Owner 選擇組織即可。

  • 可以添加 Team,賦予權限。

48 | 怎樣選擇適合自己團隊的工作流?#

需考慮因素:團隊人員的組成、研發設計能力、輸出產品的特徵、項目難易程度。

1)主幹開發方式(谷歌、Meta)

image

  • 特點:變更直接集成到主幹,快速迭代。
  • 适用于:
    • 團隊系統設計和開發能力強,有一套有效的特性切換實施機制,類似於功能開關能力;
    • 團隊成員能力強,開發簡單獨立、升級成本低的組件,即組件開發。

2)Git Flow

image

  • 特點:流程複雜,相對繁瑣。
  • 适用于:團隊不具備主幹開發能力,有預定的發布周期,對產品質量要求高,需執行嚴格的發布流程。

3)Github Flow

image

  • 特點:master 作為主線,相對 Git Flow 更嚴格。
  • 适用于:團隊不具備主幹開發能力,需隨時集成隨時發布。

4)Gitlab Flow(+ 生產分支)

image

  • 特點:master 分支 + 生產分支,發布需要先部署到生產分支。
  • 适用于:團隊不具備主幹開發能力,無法控制準確的發布時間。

5)Gitlab Flow(+ 環境分支)

image

  • 特點:master 分支 + 環境分支 + 生產分支,發布需要先部署到環境分支測試,測試通過再部署到生產分支。
  • 适用于:團隊不具備主幹開發能力,需逐個通過各個測試環境的驗證才能發布。

6)Gitlab Flow(+ 發布分支)

image

  • 特點:master 分支 + 多個發布分支,可維護不同版本。
  • 适用于:團隊不具備主幹開發能力,需對外發布和維護不同版本。

小結:每種工作流都有自己的特點,但又有一些相似點,團隊使用適合自己的即可。

49 | 如何挑選合適的分支集成策略?#

版本樹演進:Insights——Network

eg.

image

設置分支合併策略:Settings——Options——Merge Button,共 3 種。

image

1)非線性:用 merge 的方式合併( git merge ,⚠️不是 git merge --squash

eg.

image

2)線性:將要合併的所有 commits 整合成一個 commit,添加到目標分支上( git rebase ,⚠️不是 git merge --squash

eg.

image

3)線性:將要合併的所有 commits,添加到目標分支上( git rebase

eg.

image

❗️:

  • 當 Github 上有 Pull Request 後,管理者可以選擇上面三種方式中的任意一種來合併(Github 執行)。
  • 後兩種方式沒有讓分支相遇。

50 | 啟用 issue 跟蹤需求和任務#

Issues

  • 特點:狀態分為 open 和 close,通過 Labels 分類,通過 Milestone 標識大的版本變化。
  • 可設置模板:Feature、Bug、自定義,可參考優秀的第三方庫 。
  • 作用:促進團隊交流,記錄交流細節。

PS:國內優秀庫:vuejs/vue——Issues

51 | 如何用 project 管理 issue?#

Projects

  • 創建看板功能,方便管理。
  • 可設置模板,針對 Issue、PR、CR 等等。

52 | 項目內部怎麼實施 code review?#

Settings——Branches——Add rule(Branch protection rules)

  • 指定應用規則的分支 pattern
  • 勾選需要的規則,如 code review

image

53 | 團隊協作時如何做多分支的集成?#

(合併結果參考第 49 節,本節探討解決衝突方式)

場景:1)Beijing->master;2)Shanghai->master。⚠️:2)會產生衝突

  • Merge

處理 Shanghai->master 的衝突:

image

Github 會將先 master 合到 Shanghai 中解決衝突,形成新的 commit 後,再合入 master

  • Squash

處理 Shanghai->master 的衝突:

image

Github 會將先 master 合到 Shanghai 中解決衝突,形成新的 commit 後,再進行 squash 合併操作

  • Rebase

處理 Shanghai->master 的衝突:Github 無法合併,會卡在解決衝突後。

image

手動方式:回退到如下狀態;

image

在本地讓 Shanghai 基於遠端的 master 變基,解決衝突(4 次,Shanghai 的 4 次 commit;更好的方式: git rerere官方文檔

image

將本地 Shanghai 分支強制推送到遠端(因為已經不是 fast-forwards)

image

最後再進行 rebase 合併操作:

image

相當於克隆了 7 個 commits~

❗️看起來多此一舉,但從另一個角度來看,其明確區分了 Author 和 Committer 的責任。

54 | 怎樣保證集成的質量?#

  • 配置服務
    • 在 Marketplace 裡找,如 Travis CI、codecov 等等,在項目的 Setting--Integrations 裡可以配置。
    • 除此之外,可以在個人的 Setting-- Developer settings--OAuth Apps 配置第三方服務,或在 GitHub Apps 添加自己的或開源的服務。
  • 配置分支保護規則
    • 去 Settings--Branches--Branch protection rules 設置,參考第 52 節。

55 | 怎樣把產品包發布到 GitHub 上?#

Release 功能:將代碼打包成二進制的壓縮文件,方便測試、安裝。

  • 配置 CI 腳本(如.travis.yml)的 before deploy 和 deploy 部分;
  • 配置 token 等。

56 | 怎麼給項目增加詳細的指導文檔?#

Wiki 功能。

可參考優秀的 wiki 庫,拉到本地,再推送到倉庫對應的Wiki 地址(項目名後面添加了.wiki),這樣就可以編寫自己的說明文檔了。

  • 可能需要去項目的 Settings——Options 裡開啟 Wikis。

這是非常實用的一章,主要針對 Github,下一章我們再一起看看 Gitlab 吧~

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。