實作分支工作流程

已完成

分支是存放庫的複本。 分叉儲存庫可讓您自由嘗試變更,而不會影響原始專案。

最常見的情況是,分叉被用來對他人的專案提出更改,或是使用他人的專案作為您自己想法的起點。

分支是存放庫的完整複本,包括所有檔案、認可與 (選用) 分支。

分叉是支持內源工作流程的絕佳方式:當您沒有許可權直接寫入原始專案時,您可以建立分叉來建議變更。 當您準備好共用那些變更後,使用提取要求即可輕鬆對它們做出貢獻。

叉子裡有什麼?

分支會以其上游 (原始) 存放庫的所有內容作為起點。 您可以包含所有分支,或在建立分叉時,只將它們限制為預設分支。

重要筆記:

  • 不會套用任何權限、原則或組建管線。
  • 新的分叉就像有人複製原始存放庫,然後將它推送至新的空白存放庫。
  • 建立分支 (Fork) 後,除非提取要求帶有這些分支,否則不會在存放庫之間共用新的檔案、資料夾與分支 (Branch)。

在分支之間共用程式碼

您能以任一方向建立提取要求:從分支 (Fork) 到上游或從上游到分支 (Fork)。 最常見的方法是從分支 (Fork) 到上游。

目的地存放庫的許可權、原則、組建和工作專案將套用至提取要求。

在分支 (branch) 與分支 (fork) 之間選擇

  • 小型小組 (2-5 位開發人員):建議您在單一存放庫中工作。 每個人都應該在主題分支中工作,並且主分支應該受到分支策略的保護。

  • 大型團隊:隨著您的團隊成長,您可能會發現這樣的安排不足,並希望切換至分支工作流程。

  • 何時使用叉子:

    • 您的存放庫有許多臨時或不經常參與的人(例如開放原始碼專案)。
    • 只有核心貢獻者才有直接提交到您存放庫的權限。
    • 您希望來自核心團隊外部的共同作業者從分支 (Fork) 工作。
    • 您想要隔離變更,直到您有機會檢閱工作為止。

分支工作流程

以下是分叉工作流程的基本步驟:

  1. 建立分支。
  2. 在本機複製。
  3. 在本機進行變更,並將其推送至分支。
  4. 建立並完成到上游的提取要求。
  5. 將分支同步至上游的最新分支。

步驟 1:建立分支

  1. 瀏覽至要建立分支的存放庫並選擇 [分支]。
  2. 指定名稱,然後選擇您要在其中建立分叉的專案。
  3. 如果存放庫包含許多主題分支,建議您只派生預設分支。
  4. 選擇省略號,然後選擇「分叉」以建立分叉。

顯示建立分叉的圖表。

備註

您必須擁有所選專案中的 [建立存放庫] 許可權,才能建立分叉。 建議您為分支建立一個專用的專案,讓所有參與者都擁有建立存放庫的許可權。

步驟 2:在本機複製您的分支 (Fork)

一旦分支準備就緒,請使用命令列或 IDE 進行複製,例如 Visual Studio。 分支將是您的原點遠端。

git clone {your_fork_url}
For convenience, after cloning, you'll want to add the upstream repository (where you forked from) as a remote named upstream:

```bash
git remote add upstream {upstream_url}

步驟 3:編輯並推送變更

您可能直接在主要存放庫中工作,畢竟此分支是存放庫的複本。 不過,建議您仍在主題分支中工作,因為:

  • 它允許您同時維護多個獨立的工作流。
  • 它也能在您稍後想要將變更同步至您的分支 (Fork) 時減少混淆。

像平常一樣進行並提交你的變更。 當您完成變更時,請將變更推送至原點 (您的分支)。

步驟 4:建立並完成提取請求

開啟從分支 (Fork) 到上游存放庫的提取要求。 所有政策、必要的檢閱者和建置都會套用在上游存放庫中。 一旦滿足所有原則,即可完成提取請求,且變更會成為上游存放庫的永久部分。

圖表顯示建立和完成PR的過程。

這很重要

任何具有讀取權限的人都可以開啟到上游的提取要求。 如果已設定提取要求組建管線,則將會針對分支 (Fork) 中引進的程式碼執行組建。

步驟 5:將您的分支 (Fork) 同步至最新分支 (Fork)

當上游接受您的提取要求時,建議您確定自己的分支 (Fork) 也能反映存放庫的最新狀態。

我們建議重新處理上游的主分支 (Branch) (假設主分支 (Branch) 為主要開發分支 (Branch)):

git fetch upstream main
git rebase upstream/main
git push origin

分支工作流程的好處

分叉工作流程可讓您隔離主要存放庫的變更,直到您準備好進行整合為止。 當您準備好時,整合程式代碼就像完成提取要求一樣簡單。

此方法提供:

  • 安全性:在審查之前,變更會被隔離。
  • 協作: 多人可以同時處理不同的功能。
  • 品質:所有變更都會經過相同的審核程序。
  • 彈性:參與者不需要主要存放庫的寫入權限。