Skip to content

Azure DevOps — 禁止直接 Push 到 master Branch SOP

在 Azure Repos 啟用任一 Branch Policy 後,系統自動封鎖對受保護 branch 的一切直接 push,強制所有變更走 Pull Request 流程。

概述

Azure DevOps Repos 的 Branch Policy 機制提供了對特定 branch 的保護措施。其核心原理非常簡單:只要對任何 branch 啟用任一 Branch Policy,Azure Repos 就會自動封鎖對該 branch 的直接 push(包含 force push),不需要額外設定獨立的「禁止 push」開關。

這套機制配合 Pull Request 審核流程,能有效確保代碼品質:所有對 master 的變更都必須經過 reviewer 審核、CI pipeline 驗證,才能合入主線。對於多人協作的專案而言,這是防止意外破壞穩定版本的基礎防線。

設定完 Branch Policy 之後,還必須確認沒有任何成員持有 Bypass policies when pushing 權限,否則保護形同虛設。這是最容易被忽略、也最危險的疏漏。

核心內容

前置條件

執行設定的人員必須具備以下其中一項權限:

  • Project Administrators 安全群組的成員
  • 擁有 repository 層級的 Edit policies 權限

進入 Branch Policies 設定頁面

有兩條路徑可以進入設定頁:

路徑 A(推薦):

  1. 左側選單 → Repos → Branches
  2. 找到目標 branch(如 master
  3. 點選右側 ⋯(More options)
  4. 選擇 Branch policies

路徑 B:Project Settings → Repository → Policies → Branch Policies → Branch Name

啟用 Reviewer 要求政策

進入設定頁後,啟用 Require a minimum number of reviewers(設為 On,輸入所需人數)即可觸發 push 保護。這是最常見的做法,兼顧保護與實際審核需求。

建議同步調整的選項:

選項建議設定說明
Allow requestors to approve their own changes❌ 關閉避免自己審自己的 PR
Prohibit the most recent pusher from approving their own changes✅ 開啟強制職責分離
Reset all approval votes when new changes are pushed✅ 開啟有新 commit 時重置審核,防止竄改

設定生效後,任何直接 push 都會收到:

TF402455: Pushes to this branch are not permitted;
you must use a pull request to update this branch.

Bypass 權限確認(最關鍵步驟)

Azure DevOps 有兩個 Bypass 權限可以繞過 Branch Policy:

權限名稱風險說明
Bypass policies when completing pull requests允許 PR 在不符合 policy 時強制完成
Bypass policies when pushing允許直接 push 到受保護 branch,完全繞過所有 policy

確認步驟:

  1. Project Settings → Repos → Repositories
  2. 選擇目標 Repository → Security 分頁
  3. 逐一檢查相關 user 或 group
  4. 確認 Bypass policies when pushing 設為 DenyNot set

為什麼啟用任何 Policy 就能封鎖 Push

這是 Azure Repos 的設計選擇:Branch Policy 的本質是「該 branch 必須透過 PR 合入」,而直接 push 繞過了 PR 流程,因此一旦任何 Policy 存在,直接 push 在邏輯上就不被允許。不需要設定專屬的「禁止 push」規則,Policy 的存在本身就是封鎖的充分條件。

關鍵要點

  • 啟用任何一個 Branch Policy 即可封鎖直接 push,無需單獨設定
  • Bypass 權限是最危險的疏漏,設定完必須主動確認
  • Prohibit the most recent pusher from approving their own changes 確保職責分離
  • 驗收測試:用一般成員帳號執行 git push origin master,預期回傳 TF402455 錯誤

部署設定參考

以下為實際設定時的操作步驟與驗收指令,供日後查詢使用。

環境參數

項目
服務Azure DevOps Repos
保護目標master branch
觸發保護的 PolicyRequire a minimum number of reviewers

四步驟 SOP

步驟操作位置目的
1Repos → Branches → master → Branch policies進入設定頁
2Branch Policies → Require minimum reviewers → On啟用保護(觸發禁止直接 push)
3Project Settings → Repositories → Security確認無人持有 Bypass 權限
4終端機執行 git push origin master驗收保護是否生效

驗收指令

bash
# 用一般成員帳號執行,預期應失敗
git push origin master

成功保護的預期輸出:

remote: TF402455: Pushes to this branch are not permitted;
you must use a pull request to update this branch.

若指令成功(而非失敗),需回頭確認是否有成員持有 Bypass policies when pushing = Allow 的權限。

設定後的正確工作流程

feature/xxx branch

      │  git push origin feature/xxx

  Pull Request(Reviewer 審核通過)


   master branch  ✅

相關概念

來源