Appearance
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(推薦):
- 左側選單 → Repos → Branches
- 找到目標 branch(如
master) - 點選右側 ⋯(More options)
- 選擇 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 |
確認步驟:
- Project Settings → Repos → Repositories
- 選擇目標 Repository → Security 分頁
- 逐一檢查相關 user 或 group
- 確認 Bypass policies when pushing 設為 Deny 或 Not 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 |
| 觸發保護的 Policy | Require a minimum number of reviewers |
四步驟 SOP
| 步驟 | 操作位置 | 目的 |
|---|---|---|
| 1 | Repos → Branches → master → Branch policies | 進入設定頁 |
| 2 | Branch Policies → Require minimum reviewers → On | 啟用保護(觸發禁止直接 push) |
| 3 | Project 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 ✅相關概念
- Azure DevOps Pipeline CI/CD 設定指南 — 設定好 branch protection 後,可在 Pipeline 中加入 PR 品質門禁(build validation)