1818 字
9 分鐘

GitHub Branch Protection 怎麼轉 Repository Rulesets?先檢查風險與驗證流程

GitHub 在 2026 年 8 月 11 日新增了把既有 Branch Protection 規則轉成 Repository Rulesets 的導引流程。以前要遷移,通常得手動重新建立 required reviews、status checks 和 push restrictions;現在可以從 repository 設定直接啟動轉換。

這個功能解決的是「搬遷規則很容易漏項」的問題,但按下 Convert to ruleset 不代表舊規則已經安全消失。GitHub 會建立一個或多個 Active ruleset;如果原本的 Branch Protection 仍保留,兩邊會同時套用。正確做法是先預覽新行為、測試一個低風險分支,再決定何時刪除舊規則。

Branch Protection 和 Repository Rulesets 的差異#

兩者都能保護分支,但管理模型不同。Branch Protection 通常是一條規則對應一組分支;Rulesets 可以用 pattern 套用到多個分支,也能疊加多層規則。

控制面Branch ProtectionRepository Rulesets
套用範圍一條規則對應符合條件的分支可用 branch pattern 套用多個分支
多層政策同一分支主要由一條規則控制多個 rulesets 可以同時套用,最嚴格結果會生效
Bypass依既有分支保護設定處理可指定使用者、團隊或 GitHub App 的 bypass 權限
可見性需進設定頁查看規則有讀取權限的人可以查看 active rulesets
測試方式修改規則本身,或另建條件測試可先用不同 enforcement status 觀察,再逐步啟用

GitHub 官方文件也提醒,Rulesets 和 Branch Protection 可以並存,而且所有適用規則都會被執行。因此,遷移期間暫時保留舊規則是安全的觀察手段,但不能把「兩邊都開著」當成最後狀態。

轉換前先盤點會被搬過去的設定#

GitHub 的轉換工具會把現有規則映射成對應的 ruleset。開始前,先把下面幾項從舊規則頁面記下來:

  • required approving reviews 的數量、dismiss stale reviews 與 code owner review。
  • required status checks 的名稱,以及是否要求 branch 必須是最新狀態。
  • push restrictions、force push、branch deletion 和 signed commit 等限制。
  • bypass actor、administrator 是否可以略過規則,以及部署 bot 是否依賴這個例外。
  • 哪些 branch pattern 會命中這條規則,避免轉換後把範圍放大。

其中有一個不能直接一對一搬遷的例外:Require conversation resolution before merging。在 Branch Protection 中它是獨立設定;在 Rulesets 中則屬於 pull request rule 的一部分,必須同時啟用該類 pull request rule 才會套用。這是最值得在轉換預覽畫面再次核對的項目。

如果團隊目前有 required check 偶爾因 path filter 被 skipped,可以先看站內的 GitHub Actions required check 被跳過時的排查流程。那篇處理的是 check 狀態與 workflow 觸發邏輯;本篇處理的是分支治理規則如何搬遷,兩者不要混成同一個問題。

GitHub 的轉換流程怎麼走#

轉換是 repository 層級的管理操作,需要 repository admin 或具備 edit repository rules 權限的自訂角色。

  1. 開啟 repository,進入 Settings
  2. 在左側 Code and automation 區段選擇 Branches
  3. Branch protection rules 找到要搬遷的規則,點選 Convert to ruleset
  4. 為轉換產生的每個 ruleset 命名,閱讀 New behavior 預覽。
  5. 確認規則範圍、required checks、review 和 bypass 後,選擇是否在完成遷移時刪除舊 Branch Protection。
  6. 建立 ruleset,並在實際 PR 上驗證。

官方文件的建議是一次轉換一條 Branch Protection 規則。若一條舊規則會產生多個 rulesets,建立按鈕會顯示數量;不要只看到名稱相近就以為它一定是一對一的複製。

先不要勾選刪除舊規則#

如果這是 production repository,我會先保留原本的 Branch Protection。原因不是新功能不可靠,而是你需要一個短暫的對照期來確認:

驗證案例要確認的結果
正常 PRrequired review、status check 和 merge block 都照預期運作
未通過 check 的 PR新 ruleset 仍會阻止合併,而不是只顯示提示
不符合 branch pattern 的分支沒有意外套用 production 規則
維運 bot 或 release App只有原本允許的 bypass 還存在
conversation resolutionpull request rule 是否真的包含這項要求

在舊規則仍存在時,Active ruleset 會和它一起執行。如果測試時突然比原本多一道限制,先比較兩份設定,不要直接把其中一份改成更寬鬆。

什麼時候可以刪除原本的 Branch Protection#

測試通過後回到 Branches 設定頁。如果新 ruleset 已完整涵蓋原規則,GitHub 會把原本的按鈕改成提示,表示這條 Branch Protection 可以安全刪除。這個提示是「目前映射看起來完整」的訊號,不是替你完成風險審核。

刪除前再做三個人工確認:

  1. 新 ruleset 的 target branches 沒有比舊規則更廣或更窄。
  2. bypass actor、GitHub App 和部署流程仍能在預期位置工作。
  3. required checks 的 context 名稱沒有因 workflow 改名或分層而失效。

若團隊接著要把相同政策套到 organization 的多個 repository,可以在單一 repository 驗證完成後,再評估 organization-level rulesets。不要把一次成功的轉換直接複製到所有 repository,因為每個 repo 的 branch pattern、release bot 和 required checks 可能不同。

轉換後的治理重點#

Repository Rulesets 的價值不只是新介面。它讓規則可以分層、讓 active rulesets 對有讀取權限的開發者可見,也能把 bypass 權限明確指派給團隊與 App。這些特性適合拿來整理「誰能合併」和「哪些分支必須經過什麼檢查」的責任邊界。

但它仍然不是完整的 CI 安全策略。Ruleset 控制分支與標籤互動,不能取代 workflow 的 permissionspull_request_target checkout 安全、environment reviewer 或第三方 action 的版本審查。若要限制的是「誰能讓 workflow 進入 runner」,那是 GitHub Actions workflow execution protections 的問題,不是 branch ruleset 的替代方案。

把規則搬到 Rulesets 後,最有用的維護紀錄至少應包含:轉換日期、原規則名稱、產生的 ruleset 名稱、保留或刪除舊規則的決定,以及測試過的 PR。未來有人看到合併被擋時,才知道要查哪一層政策。

常見問題#

Q: Convert to ruleset 會自動刪除原本的 Branch Protection 嗎?#

A: 不會。轉換流程可以選擇在遷移完成後刪除原規則,但預設應先保留並驗證。若保留,原本的 Branch Protection 和新 Active ruleset 會同時套用;等確認新規則完整涵蓋舊規則後,再從 Branches 頁面刪除。

Q: Rulesets 會取代所有 Branch Protection 規則嗎?#

A: 不會。兩種規則可以並存,且所有符合條件的規則都會執行。Rulesets 提供更容易分層與跨分支管理的模型,但既有 Branch Protection 不會因為功能上線就自動消失。

Q: conversation resolution 為什麼要特別檢查?#

A: 因為它在 Branch Protection 中是獨立設定,但在 Rulesets 中屬於 pull request rule 的一部分,轉換時不一定能一對一對應。要從轉換預覽和新 ruleset 內容確認 pull request rule 真的已啟用。

參考資料:

GitHub Changelog:Automatically migrate branch protection rules to repository rulesets

GitHub Docs:Converting branch protections to rulesets

GitHub Docs:About rulesets

GitHub Branch Protection 怎麼轉 Repository Rulesets?先檢查風險與驗證流程
https://laplusda.com/posts/github-branch-protection-rulesets-migration/
作者
Zero
發佈於
2026-08-12
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

回報錯字、失效連結,或告訴我你想看的延伸主題。