65660
## 質問

Azure DevOpsのブランチポリシーの設定で、以下の2点を満たすにはどのように設定すれば良いでしょうか?  
\- 特定のブランチには直接プッシュできない  
\- PRの作成は可能  
要するに、特定のブランチ(upstream/masterなど)を変更するには必ずPRを介するようにしたいです。

## やったこと

上記の要求を満たしたいリポジトリのブランチポリシーにあるContributeをDenyにして、Bypass policies when completing
pull requestsをAllowにする。  
→プッシュの禁止はできましたがfork/master->upstream/masterのPRの作成もできなくなりました

## 参考情報

Azure DevOpsのドキュメント  
<https://docs.microsoft.com/en-us/azure/devops/repos/git/branch-
permissions?view=azure-devops>  
StackOverflowの質問  
VSTS - prevent push to master but allow PR merge  
<https://stackoverflow.com/questions/42719803/vsts-prevent-push-to-master-but-
allow-pr-merge>
CC BY-SA 4.0
2020-04-06T07:50:25.880
65395
2020-04-16T01:27:07.303
2020-04-10T00:43:43.657
19500
19500
question
visual-studio git azure
Azure DevOpsで特定のブランチへのプッシュを禁じてPRは許可したい
対象のブランチをロックすればいけないでしょうか？

[Lock a branch](https://docs.microsoft.com/en-us/azure/devops/repos/git/lock-
branches?view=azure-devops)
CC BY-SA 4.0
2020-04-12T06:11:26.117
65551
2020-04-12T06:11:26.117
35711
65395
answer
自己解決しました

「Repos」->「Branches」でpushを禁止したいブランチの「Branch policies ※1」を選択して  
「Require a minimum number of reviewers」の人数を1人以上にして、自分が出したPRを承認できるように「Allow
requestors to approve their own changes」にチェックを入れました  
こうすることで期待の動作になることを確認しました

また今回は試しておりませんが、kkamegawa様が提案されたブランチのロックと組み合わせることで、履歴の変更も含めて、より強固にブランチを保護できると考えております

_Locking is ideal for preventing new changes that might conflict with an
important merge or to place a branch into a read-only state. Use branch
policies and pull requests with locking if you want to ensure that changes in
a branch are reviewed before they are merged and prevent changes in the locked
branch._  
[Lock a branch](https://docs.microsoft.com/en-us/azure/devops/repos/git/lock-
branches?view=azure-devops) の 「Locking limitations」より

※1 各ブランチの右端にカーソルを合わせた時に出てくる、縦方向三点リーダーをクリックしてポップアップを表示する必要がある
CC BY-SA 4.0
2020-04-16T01:27:07.303
65660
2020-04-16T01:27:07.303
19500
65395
answer