保護ブランチ
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
プロジェクトの保護ブランチの設定は削除されます。代わりに、設定 > リポジトリ > ブランチルールから保護ブランチを設定します。
保護ブランチは、コードの安定性と品質を確保するために、GitLabのブランチに特定の権限を適用します。保護ブランチは次のことを行います:
- コードの変更をマージおよびプッシュできるユーザーを制御します。
- 重要なブランチが誤って削除されないようにします。
- コードレビューと承認プロセスを適用します。
- コードオーナーの承認要件を管理します。
- 強制プッシュ権限を規制して、コミット履歴を維持します。
- UIと保護ブランチAPIの両方からアクセスを制御します。
リポジトリのデフォルトブランチは、デフォルトで保護されています。デフォルトブランチの設定の詳細については、デフォルトブランチを参照してください。
ブランチが複数のルールに一致する場合、または複雑な権限の要件がある場合の保護ルールの動作については、Protection rulesを参照してください。
ブランチを保護する
グループ内の個々のプロジェクトまたはすべてのプロジェクトに対して保護ブランチを設定します。
プロジェクト内
前提要件:
- メンテナー以上のロールを持っている必要があります。
- グループに、保護ブランチに対するマージを許可またはプッシュとマージを許可権限を付与する際、プロジェクトはアクセス可能であり、グループと共有されている必要があります。詳細については、共有プロジェクトを参照してください。
ブランチを保護するには:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- ブランチルールを展開します。
- ブランチルールの追加 > ブランチ名またはパターンを選択します。
- ドロップダウンリストから、保護するブランチを検索して選択します。
- ブランチルールの作成を選択します。ブランチルールの詳細ページに移動します。
- ブランチの保護セクションから、次のいずれかのオプションを選択します:
- マージを許可から、編集を選択します。
- このブランチにマージできるロールを選択します。
- 変更を保存を選択します。
- プッシュとマージを許可から、編集を選択します。
- このブランチにマージできるロールを選択します。
- 必要に応じて、デプロイキーを追加するために検索します。
- 変更を保存を選択します。
- マージを許可から、編集を選択します。
GitLab PremiumおよびUltimateでは、グループまたは個々のユーザーをマージを許可およびプッシュとマージを許可に追加することもできます。
グループ内
- プラン: Premium、Ultimate
- 提供形態: GitLab Self-Managed
グループオーナーは、グループの保護ブランチを作成できます。これらの設定はグループ内のすべてのプロジェクトに継承され、プロジェクトの設定で上書きすることはできません。
前提要件:
- グループのオーナーロールを持っている必要があります。
- このグループはトップレベルグループである必要があります。サブグループはサポートされていません。
グループ内のすべてのプロジェクトに対してブランチを保護するには:
- 左側のサイドバーで、検索または移動先を選択して、グループを見つけます。
- 設定 > リポジトリを選択します。
- 保護ブランチを展開します。
- 保護ブランチを追加するを選択します。
- ブランチテキストボックスに、ブランチ名またはワイルドカード(
*)を入力します。ブランチ名とワイルドカードでは大文字と小文字が区別されます。 - マージを許可リストから、このブランチにマージできるロールを選択します。
- プッシュとマージを許可リストから、このブランチにプッシュできるロールを選択します。
- 強制プッシュを許可およびコードオーナーの承認が必要の設定の優先順位を選択します。
- 保護を選択します。
プッシュとマージの権限
マージを許可とプッシュとマージを許可の設定は、ブランチの保護のさまざまな側面を制御します:
| 設定 | 目的 | デフォルトの動作(未設定) |
|---|---|---|
| マージを許可 | マージリクエストを通じて変更をマージし、UIとAPIを通じて新しい保護ブランチを作成できるユーザーを制御します | プッシュとマージを許可を持っていない限り、誰もマージできません。 |
| プッシュとマージを許可 | 既存の保護ブランチに直接プッシュし、マージリクエストを介してマージできるユーザーを制御します | 誰もプッシュできません。 |
プッシュとマージを許可すると、プッシュ機能とマージ機能の両方が許可されます。この権限を持つユーザーは、マージを許可権限がなくても、マージリクエストを介してマージできます。
ブランチの種類ごとの保護戦略
ブランチの種類が異なると、その目的とセキュリティ要件に基づいて異なる保護レベルが必要になります。
本番環境にデプロイされたブランチの場合:
- マージを許可をメンテナーのみに設定します。
- プッシュとマージを許可をなし(空にしない)に設定します。
- コードオーナーの承認が必要を有効にします。
- 複数の承認を要求することを検討してください。
この設定では、すべての変更にメンテナーの承認を伴うマージリクエストが必要です。
アクティブな開発ブランチの場合:
- マージを許可をデベロッパー + メンテナーに設定します。
- プッシュとマージを許可をなし(空にしない)に設定します。
この設定では、デベロッパーはコードレビューを必要とするすべての変更を要求しながら、承認されたマージリクエストをマージできます。
プッシュとマージを許可が設定されていない場合、プッシュアクセスは制限されません。直接プッシュを禁止するには、プッシュとマージを許可を明示的になしに設定する必要があります。
デベロッパーロールの権限の組み合わせ
次の例は、デベロッパーロールを持つユーザーが、さまざまな保護設定で何ができるかを示しています:
| マージを許可する | プッシュとマージを許可する | 直接プッシュ | マージリクエストによるマージ |
|---|---|---|---|
| なし | デベロッパー + メンテナー | 対応 | 対応 |
| 未設定 | デベロッパー + メンテナー | 対応 | 対応 |
| デベロッパー + メンテナー | 未設定 | 対象外 | 対応 |
| 未設定 | 未設定 | 対象外 | 対象外 |
| メンテナー: | 未設定 | 対象外 | 対象外 |
| メンテナー: | メンテナー: | 対象外 | 対象外 |
| デベロッパー + メンテナー | メンテナー: | 対象外 | 対応 |
デフォルトのブランチ保護設定
管理者は、管理者エリアでデフォルトのブランチ保護レベルを設定できます。
ワイルドカードルールを使用する
ワイルドカードを使用すると、複数のルールを1つのブランチに適用できます。複数のルールがブランチに適用される場合、最も寛容なルールがブランチの動作を制御します。適切にマージ制御を行うには、マージを許可よりも広範なユーザーセットに対してプッシュとマージを許可を設定します。
前提要件:
- メンテナー以上のロールを持っている必要があります。
複数のブランチを同時に保護するには:
左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
設定 > リポジトリを選択します。
ブランチルールを展開します。
ブランチルールの追加 > ブランチ名またはパターンを選択します。
ブランチドロップダウンリストで、ブランチ名とワイルドカード (
*) を入力します。ブランチ名とワイルドカードでは大文字と小文字が区別されます。例:ワイルドカード保護ブランチ 一致するブランチ *-stableproduction-stable、staging-stableproduction/*production/app-server、production/load-balancer*gitlab*gitlab、gitlab/staging、master/gitlab/productionワイルドカードの作成を選択します。
ブランチルールの作成を選択します。ブランチルールの詳細ページに移動します。
ブランチの保護セクションから、次のいずれかのオプションを選択します:
- マージを許可から、編集を選択します。
- このブランチにマージできるロールを選択します。
- 変更を保存を選択します。
- プッシュとマージを許可から、編集を選択します。
- このブランチにマージできるロールを選択します。
- 必要に応じて、デプロイキーを追加するために検索します。
- 変更を保存を選択します。
- マージを許可から、編集を選択します。
保護オプションを設定する
さまざまな保護オプションを設定して、ブランチを保護することができます。
マージリクエストを要求する
保護ブランチへの直接チェックインを許可するのではなく、すべてのユーザーにマージリクエストの送信を強制できます:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- ブランチルールを展開します。
- ブランチの横にある詳細を表示を選択します。
- マージを許可セクションで、編集を選択します
- デベロッパー + メンテナーを選択します。
- 変更を保存を選択します。
- プッシュとマージを許可セクションで、なしを選択します。
- 変更を保存を選択します。
直接プッシュを許可する
書き込みアクセス権を持つ全員が保護ブランチに直接プッシュできるようにすることができます。
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- ブランチルールを展開します。
- ブランチの横にある詳細を表示を選択します。
- プッシュとマージを許可セクションで、デベロッパー + メンテナーを選択します。
- 変更を保存を選択します。
グループ権限を使用する
保護ブランチに対してグループまたはサブグループのメンバーをマージを許可またはプッシュとマージを許可として設定するには:
左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
設定 > リポジトリを選択します。
ブランチルールを展開します。
ブランチの横にある詳細を表示を選択します。
マージを許可またはプッシュとマージを許可セクションで、編集を選択します。
グループの下で、グループを追加するために検索します。例:
# 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のWebインターフェースを使用して、保護ブランチを手動で削除できます:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- コード > ブランチを選択します。
- 削除するブランチの横にある追加のアクション ( ) を選択します。
- 保護ブランチを削除を選択します。
- 確認ダイアログでブランチ名を入力し、はい、保護ブランチを削除しますを選択します。ブランチ名では、大文字と小文字が区別されます。
保護ブランチは、GitLab UIまたはAPIでのみ削除できます。ローカルのGitコマンドまたはサードパーティのGitクライアントで保護ブランチを削除することはできません。
ポリシーの実施
セキュリティとコンプライアンスのために、マージリクエスト承認ポリシーを実装する場合があります。この場合、インスタンス、グループ、またはプロジェクトで別途定義されている設定に影響を与える可能性があります。ポリシーは、ユーザーがブランチの保護を解除したり、ブランチを削除したり、プッシュまたは強制プッシュを行ったりすることの可否に影響を与える場合があります。
関連トピック
トラブルシューティング
ブランチ名では大文字と小文字が区別される
gitのブランチ名では大文字と小文字が区別されます。保護ブランチまたはターゲットブランチのワークフローを設定する場合、devはDEVまたはDevと同じではありません。