實作分支合併限制

已完成

Azure DevOps 和 GitHub 所裝載版本控制系統中的分支合併限制,對於控制程式代碼品質、促進共同作業,以及增強軟體開發專案的穩定性至關重要。 它們會協助組織強制執行程式碼檢閱、驗證自動化測試的成功完成,以及防止強制推送至指定的分支。 這些條件約束有助於維護程式代碼基底的完整性、防止意外變更,並確保只會將已驗證和已核准的變更合併至生產分支。

分支合併限制的一般概念與平台無關。 雖然 Azure DevOps 和 GitHub 之間的實作狀況有些不同,但也有許多相似之處,最主要提供了它們之間的功能同位。

Azure DevOps

在 Azure DevOps 中,您可以使用分支保護型原則來實作分支合併限制。

若要實作分支保護,請瀏覽至 Azure DevOps 入口網站中的存放庫,並選取要套用合併限制的分支。 或者,您可以將保護範圍限制為與指定模式相符的目前和未來分支。 在保護設定中,您可以套用下列分支原則:

  • 需要最少的檢閱者數目:確保未經所需的核准數目,就無法合併變更。
  • 檢查連結的工作項目:藉由檢查提取要求上連接的專案,以鼓勵可追蹤性
  • 檢查註解解析:確認提取要求中的所有註解均已解決
  • 限制合併類型:限制提取要求完成時可用的合併類型,可控制分支歷程記錄。 這包括選擇性地啟用或停用下列合併類型的選項:
    • 基本合併 (沒有向前快轉):準確保留在開發期間發生的歷程記錄。
    • 重訂基底和向前快轉:對目標重新執行來源分支認可,但不建立合併認可,以建立線性歷程記錄。
    • 壓縮合併:將來源分支認可緊縮為目標分支上新的單一認可,建立線性歷程記錄。
    • 利用合併認可重訂基底:以對目標重新執行來源分支認可,然後再建立合併認可的方式,建立半線性歷程記錄。

您可以選擇性地設定下列條件約束:

  • 建置驗證:預先合併及建置提取要求變更以驗證程式碼。
  • 狀態檢查:需要其他服務才可發佈成功狀態,以完成所有提取要求。 狀態檢查是提取要求程序期間觸發的自動化工作,用於在允許提取要求合併至目標分支之前先驗證特定準則。 在 Azure DevOps 中,狀態檢查會與組建管線和發行管線相關聯。
  • 自動包含檢閱者:指定在提取要求變更特定程式碼區域時,要自動包含的程式碼檢閱者。

您也可以選擇鎖定分支,有效地讓分支成為唯讀狀態。

請注意,Azure DevOps 提供兩個選項來略過存放庫的原則需求。 若要實作它們,您需要透過將執行下列動作權限設定為 [允許],變更存放庫的預設安全性設定:

  • 完成提取要求時,略過原則。
  • 推送時略過原則。

請務必確保這些權限只授與指定個人,該人員會了解這些動作對符合組織標準的影響,並能夠在使用時做出明智的判斷。

GitHub

在 GitHub 中,您可以使用分支保護規則來實作分支合併限制。 分支保護規則會定義共同作業者是否可以刪除或強制推送至分支,並設定任何推送至分支的需求,例如傳遞狀態檢查或線性認可歷程記錄。 如同 Azure DevOps,您可以根據名稱模式比對將它們套用至特定分支。

若要實作分支保護規則,請瀏覽至 GitHub Web 介面中的存放庫,並在 [設定] 索引標籤的瀏覽功能表中,選取 [分支] 功能表項目。 這可讓您存取分支保護規則設定。 在保護設定中,您可以套用下列規則:

  • 要求提取要求才能合併:需要參與者在合併其變更之前提交提取要求以進行檢閱和核准。
  • 要求通過狀態檢查才能合併:指定在允許合併之前必須通過的狀態檢查。 啟用時,必須先將認可推送至另一個分支,然後在狀態檢查通過之後合併或直接推送至與此規則相符的分支。
  • 要求對話解析才能合併:確保在合併提取要求之前,所有與程式碼變更相關的討論和註解都已解決。
  • 需要已簽署的認可:要求推送至受保護分支的認可必須使用已驗證的簽名進行簽署,以增強安全性並確保程式碼貢獻的真實性。
  • 需要線性歷程記錄:防止受保護分支中的合併認可、強制執行線性歷程記錄,以便更輕鬆地追蹤,並視需要反轉任何變更。 這實際上表示任何提取要求都必須使用壓縮合併或重訂基底合併。
  • 要求部署成功才能合併:指定提取要求中的變更必須在整合至程式碼基底之前先經過徹底測試和驗證。
  • 鎖定分支:作為其 Azure Devops 對等專案,限制對該分支的寫入存取,使其成為唯讀狀態。
  • 不允許略過上述設定:消除系統管理員和使用者授與略過分支保護權限的使用者略過其他規則的可能性。
  • 允許強制推送:允許具有推送權限的使用者強制推送變更。 如同 Azure DevOps 一樣,這只是一項緊急措施。
  • 允許刪除:允許具有推送權限的使用者刪除受保護的分支。 儘管這種靈活性可以簡化分支管理,但也會造成意外或惡意刪除分支的風險,因此應謹慎控制,以防止遺失資料並保持存放庫的完整性。