BEACHSIDE BLOG

Azure と GitHub と C# が好きなエンジニアの個人メモ ( ・ㅂ・)و ̑̑

Azure DevOps : master ブランチだけは削除できないように権限設定

Azure DevOps の Repos で、

  • master は削除できない
  • master ブランチ以外は削除できる(Pull Request の Complete の時とか)

という権限設定をするときのメモです。 PR を merge するときにブランチ消したいので削除権限は必要だけど master だけは削除できないようにしたいシナリオで、プロダクトの Reposigory には必ず設定しておきたいやつです。

悪意を持って mastar ブランチ消すチームメンバーはいないと信じたいですが、オペミスがないとは言えないので消えないようにしておきたいですよね。

権限設定をせずに簡易にブランチを削除できないようにするには、Azure DevOps の Repos > Branches でブランチの右の方の "・・・" (More ってメニュー) をクリックして Lock をすれば削除できなくなります。個人プロジェクトとかで権限でコントロールするほどではないんだよってときはこれで充分です。

開発者を Azure DevOps の組織に招待するとき、だいたい Project Contributors の権限で招待する感じですよね。また、プロジェクトを作成した時には、Project settings > Security で確認してわかる通り、デフォルトのプロジェクトチームは Contributors に所属しています。

f:id:beachside:20190207172829p:plain


Admin 権限を持っていない、Contributors に属しているメンバー向けの設定をする前提で話を進めます。2 ステップの設定で実現できます。

権限設定ステップ1

まず、対象のブランチに対して Contributor がブランチを削除できるようにします。

Project Settings > Repo の中の Reposigories で対象の Reposigory(ここでは「Devops-Role-Check」)を選択します。Git repositories を選択することで全てのRepositoryを対象にすることも可能です。

f:id:beachside:20190207180030p:plain


そして Contributors > 「Force push (rewrite history, delete branches and tags)」 を Allow にします。

f:id:beachside:20190207180010p:plain

これで "基本的" にブランチを削除できるようになりました。
"基本的" といっているのは、例として以下の時に削除できません。

  • 「Sample2」ブランチをうっかり Default のブランチに設定してしまう
  • 「Sample2」ブランチ→「master」ブランチへ Pull Request

これで PRの Complete 時に、下図のようにチェック出来るはずのトピックブランチの削除のチェックがつけれなくなります。(Branchesから直接「Sample2」ブランチの削除はできます)。

f:id:beachside:20190207190639p:plain

余談ですが Default Branch の設定の変え方はこちら


権限設定ステップ2

"ステップ2"とか書いてるのはなんかきもいですが進みます。

上記の設定で権限が継承されて削除できるようになるので、次は、master ブランチだけは削除させない設定をします。

先ほどと同様の画面、Project Settings > Repo の中の Reposigories で対象の master ブランチを選択 > Contributors > 「Force push (rewrite history, delete branches and tags)」 を Deny にします。

f:id:beachside:20190207191331p:plain

Force push (rewrite history, delete branches and tags)」の設定は、ステップ1で指定した Repository 配下のブランチは Allow が継承されますが、master ブランチだけは Deny になります。