保護ブランチ
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
プロジェクトの保護ブランチ設定は削除されます。設定 > リポジトリ > ブランチルールから保護ブランチを設定してください。
保護ブランチは、GitLabのブランチに特定の権限を適用して、codeコードの安定性と品質を確保します。保護ブランチは次のことを行います。
- コードの変更をマージおよびプッシュできるユーザーを制御します。
- 重要なブランチが誤って削除されないようにします。
- コードレビューと承認プロセスを適用します。
- コードオーナーの承認要件を管理します。
- 強制プッシュ権限を規制して、コミット履歴を維持します。
- UIと保護ブランチAPIの両方でアクセスを制御します。
リポジトリのデフォルトブランチはデフォルトで保護されています。デフォルトブランチの設定に関する詳細については、デフォルトブランチを参照してください。
ブランチが複数のルールに一致する場合や、複雑な権限要件を持つ場合の保護ルール動作に関する詳細については、保護ルールを参照してください。
ブランチを保護する
グループ内の個々のプロジェクトまたはすべてのプロジェクトに対して保護ブランチを設定します。
グループルールはプロジェクト内で変更できませんが、プロジェクトのメンテナーは同じブランチ名に対して個別のルールを作成できます。両方のルールが同じブランチに適用される場合、GitLabはすべての一致するルールをまとめて評価し、ほとんどの設定で最も許容度の高い結果を適用します。詳細については、グループとプロジェクト間のルールを参照してください。
プロジェクト内
前提条件:
- メンテナーまたはオーナーのロールを持っている必要があります。
- グループに、保護ブランチに対するマージを許可するまたはプッシュとマージを許可する権限を付与する際、プロジェクトはアクセス可能であり、グループと共有されている必要があります。詳細については、共有プロジェクトを参照してください。
ブランチを保護するには:
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- ブランチルールを展開します。
- ブランチルールの追加 > ブランチ名またはパターンを選択します。
- ドロップダウンリストから、保護したいブランチを検索して選択します。
- ブランチルールの詳細ページを表示するには、ブランチルールの作成を選択します。
- ブランチの保護セクションから、次のいずれかのオプションを選択します:
- マージを許可から編集を選択します。
- このブランチにマージできるロールを選択します。
- 変更を保存を選択します。
- プッシュとマージを許可から編集を選択します。
- このブランチにプッシュできるロールを選択します。
- オプション。デプロイキーを検索して選択します。
- 変更を保存を選択します。
- マージを許可から編集を選択します。
PremiumとUltimateでは、グループまたは個々のユーザーをマージを許可とプッシュとマージを許可に追加することもできます。
グループ内
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
グループオーナーは、グループの保護ブランチを作成できます。これらの設定はグループ内のすべてのプロジェクトに適用され、プロジェクトでは変更できません。
前提条件:
- グループのオーナーロールを持っている必要があります。
- このグループはトップレベルグループである必要があります。サブグループはサポートされていません。
グループ内のすべてのプロジェクトでブランチを保護するには:
- 上部のバーで、検索または移動先を選択して、グループを見つけます。
- 設定 > リポジトリを選択します。
- 保護ブランチを展開します。
- 保護ブランチを追加するを選択します。
- ブランチテキストボックスに、ブランチ名またはワイルドカード (
*) を入力します。ブランチ名とワイルドカードは、大文字と小文字を区別します。 - マージを許可するリストから、このブランチにマージできるロールを選択します。
- プッシュとマージを許可するリストから、このブランチにプッシュできるロールを選択します。
- 強制プッシュを許可とコードオーナーの承認が必要の設定を選択します。
- 保護を選択します。
プッシュとマージの権限
マージを許可とプッシュとマージを許可の設定は、ブランチ保護のさまざまな側面を制御します:
| 設定 | 目的 | デフォルトの動作(未設定) |
|---|---|---|
| マージを許可する | マージリクエストを介して変更をマージし、UIとAPIを介して新しい保護ブランチを作成できるユーザーを制御します。 | 誰もマージできません(プッシュとマージを許可の権限を持つ場合を除く)。 |
| プッシュとマージを許可する | 既存の保護ブランチに直接プッシュし、マージリクエストを介してマージできるユーザーを制御します。 | 誰もプッシュできません。 |
プッシュとマージを許可は、プッシュとマージの両方の機能を与えます。この権限を持つユーザーは、マージを許可の権限がなくても、マージリクエストを介してマージできます。
なしをマージを許可またはプッシュとマージを許可のいずれかに選択すると、UIは他のロール選択をクリアします。この動作は、複数のアクセスレベルを同時に設定できるAPIとは異なります。APIの動作に関する詳細については、保護ブランチAPIを参照してください。
ブランチタイプ別の保護戦略
異なるブランチタイプは、その目的とセキュリティ要件に基づいて、異なる保護レベルを必要とします。
本番環境にデプロイされるブランチの場合:
- マージを許可をメンテナーのみに設定します。
- プッシュとマージを許可をなし (空ではない)に設定します。
- コードオーナーの承認が必要を有効にします。
- 複数の承認を要求することを検討します。
この設定では、すべての変更に対してメンテナーの承認を伴うマージリクエストが必要です。
アクティブな開発ブランチの場合:
- マージを許可をデベロッパー + メンテナーに設定します。
- プッシュとマージを許可をなし (空ではない)に設定します。
この設定により、デベロッパーは承認されたマージリクエストをマージでき、すべての変更にコードレビューが必要となります。
プッシュとマージを許可が設定されていない場合、プッシュアクセスは制限されません。直接プッシュを防ぐには、プッシュとマージを許可を明示的になしに設定する必要があります。
デベロッパーロールの権限の組み合わせ
以下の例は、デベロッパーロールを持つユーザーが、さまざまな保護設定で何ができるかを示しています:
| マージを許可する | プッシュとマージを許可する | 直接プッシュ | MRを介したマージ |
|---|---|---|---|
| なし | デベロッパー + メンテナー | ||
| Not configured | デベロッパー + メンテナー | ||
| デベロッパー + メンテナー | Not configured | いいえ | |
| Not configured | Not configured | いいえ | いいえ |
| メンテナー | Not configured | いいえ | いいえ |
| メンテナー | メンテナー | いいえ | いいえ |
| デベロッパー + メンテナー | メンテナー | いいえ |
デフォルトのブランチ保護設定
管理者は、管理者エリアでデフォルトのブランチ保護レベルを設定できます。
ワイルドカードルールを使用する
ワイルドカードを使用すると、複数のルールを1つのブランチに適用できます。複数のルールがブランチに適用される場合、最も寛容なルールがブランチの動作を制御します。適切にマージ制御を行うには、マージを許可するよりも広範なユーザーセットに対してプッシュとマージを許可するを設定します。
前提条件:
- メンテナーまたはオーナーのロールを持っている必要があります。
複数のブランチを同時に保護するには:
上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
設定 > リポジトリを選択します。
ブランチルールを展開します。
ブランチルールの追加 > ブランチ名またはパターンを選択します。
ドロップダウンリストから、ブランチ名とワイルドカード (
*) を入力します。ブランチ名とワイルドカードは、大文字と小文字を区別します。例:ワイルドカード保護ブランチ 一致するブランチ *-stableproduction-stable、staging-stableproduction/*production/app-server、production/load-balancer*gitlab*gitlab、gitlab/staging、master/gitlab/productionワイルドカードの作成を選択します。
ブランチルールの作成を選択します。ブランチルールの詳細ページに移動します。
ブランチの保護セクションから、次のいずれかのオプションを選択します:
- マージを許可から編集を選択します。
- このブランチにマージできるロールを選択します。
- 変更を保存を選択します。
- プッシュとマージを許可から編集を選択します。
- このブランチにマージできるロールを選択します。
- 必要に応じて、デプロイキーを検索して追加します。
- 変更を保存を選択します。
- マージを許可から編集を選択します。
保護オプションを設定する
さまざまな保護オプションを設定して、ブランチを保護することができます。
マージリクエストを要求する
保護ブランチへの直接チェックインを許可するのではなく、すべてのユーザーにマージリクエストの送信を強制できます。
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- ブランチルールを展開します。
- あなたのブランチの隣にある詳細を表示を選択します。
- マージを許可セクションから編集を選択します。
- デベロッパー + メンテナーを選択します。
- 変更を保存を選択します。
- プッシュとマージを許可セクションからなしを選択します。
- 変更を保存を選択します。
直接プッシュを許可する
書き込みアクセス権を持つ全員が保護ブランチに直接プッシュできるようにすることができます。
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- ブランチルールを展開します。
- あなたのブランチの隣にある詳細を表示を選択します。
- プッシュとマージを許可セクションからデベロッパー + メンテナーを選択します。
- 変更を保存を選択します。
グループ権限を使用する
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
保護ブランチに対してグループまたはサブグループのメンバーをマージを許可するまたはプッシュとマージを許可するとして設定するには:
上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
設定 > リポジトリを選択します。
ブランチルールを展開します。
あなたのブランチの隣にある詳細を表示を選択します。
マージを許可またはプッシュとマージを許可セクションで編集を選択します。
グループで、追加するグループを検索します。例:
# Allow group members to merge into this branch Allowed to merge: @group-x # Allow group members to push and merge into this branch Allowed to push and merge: @group-x/subgroup-y変更を保存を選択します。
保護ブランチにグループを割り当てた場合、そのグループの直接メンバーのみが含まれます。親グループのメンバーに保護ブランチへの権限が自動的に付与されることはありません。
グループの継承要件
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TD
accTitle: Diagram of group inheritance for protected branches
accDescr: If a project is shared with a group, the group members inherit permissions for protected branches.
A[Parent group X] -->|owns| B[Project A]
A -->|contains| C[Subgroup Y]
B -->|shared with| C
C -->|members inherit permissions| B
この例では:
- 親グループX(
group-x)はプロジェクトAを所有しています。 - 親グループXには、サブグループ、サブグループY(
group-x/subgroup-y)も含まれています。 - プロジェクトAはサブグループYと共有されています。
保護ブランチ権限の対象となるグループは、次のようになります。
- プロジェクトA: グループXとサブグループYの両方(プロジェクトAがサブグループYと共有されているため)。
グループとプロジェクトを共有する
プロジェクトをグループまたはサブグループと共有して、そのメンバーを保護ブランチ権限の対象にできます。
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph LR
accTitle: Diagram of project sharing for protected branch permissions
accDescr: Sharing a project with a group affects whether their members can have protected branch permissions.
A[Parent group X] -->|owns| B[Project A]
A -->|also contains| C[Subgroup Y]
C -.->D{Share Project A<br/>with Subgroup Y?} -.->|yes| E[Members of Subgroup Y<br/>can have protected<br/>branch permissions]
D{Share Project A<br/>with Subgroup Y?} -.->|no| F[Members of Subgroup Y<br />cannot have protected<br/>branch permissions]
E -.->|Add Subgroup Y<br/> to protected branch settings| I[Subgroup Y members<br/>can merge/push] -.-> B
F -.-> |Add Subgroup Y<br/> to protected branch settings| J[Settings will not<br/>take effect] -.-> B
プロジェクトAのサブグループYメンバーにアクセス権を付与するには、プロジェクトをサブグループと共有する必要があります。サブグループを保護ブランチ設定に直接追加しても効果はなく、サブグループメンバーには適用されません。
グループが保護ブランチの権限を持つには、プロジェクトがグループと直接共有されている必要があります。親グループから継承されたプロジェクトメンバーシップは、保護ブランチ権限に対して不十分です。
デプロイキーアクセスを有効にする
デプロイキーを使用して保護ブランチにプッシュできます。
前提条件:
- デプロイキーがプロジェクトに対して有効である必要があります。プロジェクトのデプロイキーは、作成時にデフォルトで有効になっています。ただし、パブリックなデプロイキーには、プロジェクトへのアクセスが許可されている必要があります。
- そのデプロイキーには、プロジェクトリポジトリへの書き込みアクセス権限が必要です。
- デプロイキーのオーナーは、プロジェクトへの読み取りアクセス権以上を持っている必要があります。
- デプロイキーのオーナーはプロジェクトのメンバーでもある必要があります。
デプロイキーが保護ブランチにプッシュできるようにするには:
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- ブランチルールを展開します。
- あなたのブランチの隣にある詳細を表示を選択します。
- プッシュとマージを許可セクションから編集を選択します。
- デプロイキーで、デプロイキーを検索して追加します。
- 変更を保存を選択します。
デプロイキーは、マージを許可するドロップダウンリストにありません。
強制プッシュを許可する
保護ブランチへの強制プッシュを許可できます。
ブランチを保護し、強制プッシュを有効にするには:
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- ブランチルールを展開します。
- ブランチルールの追加 > ブランチ名またはパターンを選択します。
- ドロップダウンリストから、保護し強制プッシュを有効にしたいブランチを検索して選択します。
- ブランチルールの作成を選択します。ブランチルールの詳細ページに移動します。
- プッシュとマージを許可とマージを許可セクションから、希望の設定を選択します。
- 変更を保存を選択します。
- プッシュアクセスを持つすべてのユーザーに強制プッシュを許可するには、強制プッシュを許可する切替をオンにします。
すでに保護されているブランチで強制プッシュを有効にするには、次の手順に従います。
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- ブランチルールを展開します。
- あなたのブランチの隣にある詳細を表示を選択します。
- 強制プッシュを許可切替をオンにします。
コードオーナー承認を要求する
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
保護ブランチの場合、少なくとも1つのコードオーナーによる承認を要求できます。複数のルールによってブランチが保護されている場合、Required approval from code ownersが有効であれば、コードオーナーの承認が必要です。
新しいブランチを保護して、コードオーナーの承認を有効にするには:
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- ブランチルールを展開します。
- ブランチルールの追加 > ブランチ名またはパターンを選択します。
- ドロップダウンリストから、保護し強制プッシュを有効にしたいブランチを検索して選択します。
- ブランチルールの作成を選択します。ブランチルールの詳細ページに移動します。
- プッシュとマージを許可とマージを許可セクションから、希望の設定を選択します。
- 変更を保存を選択します。
- コードオーナーの承認が必要切替をオンにします。
すでに保護されているブランチでコードオーナーの承認を有効にするには:
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- ブランチルールを展開します。
- あなたのブランチの隣にある詳細を表示を選択します。
- コードオーナーの承認切替をオンにします。
有効にすると、これらのブランチに対するすべてのマージリクエストで、マージされる前に、一致するルールごとにコードオーナーによる承認が必要になります。さらに、ルールが一致した場合、保護ブランチへの直接プッシュは拒否されます。
CODEOWNERSファイルで指定されていないユーザーは、特に許可されていない限り、指定されたファイルまたはパスの変更をプッシュできません。デベロッパーが保護ブランチに直接プッシュすることを制限する必要はありません。代わりに、コードオーナーによるレビューが必要な特定のファイルへのプッシュは制限できます。
保護ブランチにプッシュすることを許可されたユーザーとグループは、フィーチャーブランチをマージするためにマージリクエストを必要としません。したがって、マージリクエストの承認ルール(コードオーナーを含む)をスキップできます。
ブランチの保護を解除できるユーザーを制御する
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
ブランチを保護する場合、後でその保護を解除できるユーザーも制御できます。デフォルトでは、メンテナーまたはオーナーロールを持つユーザーは、保護ブランチの保護を解除できます。
規制またはコンプライアンス要件を持つ組織の場合、これらの権限を特定のユーザー、グループ、またはアクセスレベルに制限できます。
ブランチの保護設定が永続的にロックされるのを避けるため、少なくとも1人のユーザーまたはグループが常にそのブランチの保護解除権限を保持していることを確認してください。
ユーザーは、自身でブランチの保護を解除できない限り、保護ブランチの設定を作成、変更、または削除することはできません。この安全機構は、設定エラーを防ぐために設けられています。
これらの権限はAPIを介してのみ設定できます。この機能は、次の目的で使用します:
- 規制コンプライアンス: 承認された担当者のみがブランチ保護を変更できることを確認します。
- 大規模組織: 複数のリポジトリ間での誤った保護の削除を防ぎます。
- 自動ガバナンス: 開発チームがオーバーライドできない、管理者専用の保護を作成するスクリプトを有効にします。
保護解除権限に関する有効なアクセスレベルと制約については、有効なアクセスレベルを参照してください。
保護解除権限
以下の表は、設定に基づいてブランチの保護を解除できるユーザーを示しています:
| 設定 | 保護を解除できるユーザー |
|---|---|
| デフォルトの動作 | メンテナーまたはオーナーロールを持つユーザー |
| 特定のユーザーが設定 | 指定されたユーザーのみ |
| 特定のグループが設定 | 指定されたグループのメンバーのみ |
| 複数のアクセスレベルが設定 | 設定されたアクセスレベルからの任意のユーザー、グループ、またはロール |
保護ブランチでのCI/CD
保護ブランチへのマージまたはプッシュの権限により、ユーザーがCI/CDパイプラインを実行し、ジョブでアクションを実行できるかどうかが定義されます。
マージリクエストパイプラインは、ソースブランチまたはソースブランチに基づくマージリクエスト参照で実行されます。ユーザーがソースブランチへのマージまたはプッシュ権限を持っていない場合、パイプラインは作成されません。
保護ブランチ間のマージリクエストの場合、ユーザーがソースとターゲットブランチの両方を更新する権限を持っていれば、保護された変数とRunnerがパイプラインで利用できます。詳細については、保護された変数とRunnerへのアクセスを制御するを参照してください。
保護ブランチを作成する
前提条件:
- デベロッパー、メンテナー、またはオーナーロールが必要です。
- 保護ブランチを作成するには、保護ブランチにマージリクエストを送信することを全員に要求するようにブランチ保護を設定する必要があります。
保護付きの新しいブランチを作成するには、次の手順に従います。
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 左サイドバーでコード > ブランチを選択します。
- 新しいブランチを選択します。
- ブランチ名を入力し、新しいブランチのベースにする既存のブランチ、タグ、またはコミットを選択します。保護ブランチに対してすべてのユーザーにマージリクエストの提出を要求する場合、既存の保護ブランチと、すでに保護ブランチ内にあるコミットのみが受け入れられます。
ブランチを保護して作成するために、ブランチAPIを使用することもできます。
ブランチ保護が全員が保護ブランチに直接プッシュできるように設定されている場合、コマンドラインまたはGitクライアントアプリケーションから保護されたブランチを作成することもできます。
保護ブランチを削除する
メンテナーまたはオーナーロールを持つユーザーは、GitLabのウェブインターフェースを使用して保護ブランチを手動で削除できます:
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 左サイドバーでコード > ブランチを選択します。
- 削除したいブランチの隣にある追加のアクション ( ) を選択します。
- 保護ブランチを削除を選択します。
- 確認ダイアログでブランチ名を入力し、はい、保護ブランチを削除しますを選択します。ブランチ名では、大文字と小文字が区別されます。
GitLab UIまたはAPIを使用してのみ保護ブランチを削除できます。ローカルのGitコマンドまたはサードパーティのGitクライアントで保護ブランチを削除することはできません。
ポリシーの実施
セキュリティとコンプライアンスのために、マージリクエスト承認ポリシーを実装する場合があります。この場合、インスタンス、グループ、またはプロジェクトで別途定義されている設定に影響を与える可能性があります。ポリシーは、ユーザーがブランチの保護を解除したり、ブランチを削除したり、プッシュまたは強制プッシュを行ったりすることの可否に影響を与える場合があります。
関連トピック
トラブルシューティング
ブランチ名では大文字と小文字が区別される
gitのブランチ名では大文字と小文字が区別されます。保護ブランチまたはターゲットブランチのワークフローを設定する場合、devはDEVまたはDevと同じではありません。