マージリクエストの承認設定
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
承認ルールがユースケースに適合するように、マージリクエストの承認設定を構成できます。マージ前に作業を承認する必要があるユーザーの数と種類を定義する承認ルールも設定できます。マージリクエストの承認設定では、マージリクエストが完了に向かうにつれて、これらのルールをどのように適用するかを定義します。
次の設定を任意に組み合わせて使用して、マージリクエストの承認制限を設定します:
- マージリクエストの作成者による承認を防止する: マージリクエストの作成者が承認することを禁止します。
- コミットを追加したユーザーによる承認を防ぎます: マージリクエストにコミットを追加するユーザーが承認することも禁止します。
- マージリクエストの承認ルールの編集を防ぎます: ユーザーがマージリクエストでプロジェクト承認ルールをオーバーライドすることを禁止します。
- 承認するにはユーザーの再認証が必要: 承認者は、最初にパスワードまたはSAMLで認証する必要があります。
- Code Owner approval removals(コードオーナーの承認削除): コミットがマージリクエストに追加された場合に既存の承認がどうなるかを定義します。
- 承認を維持: 承認を削除しません。
- すべての承認を削除: 既存のすべての承認を削除します。
- ファイルが変更された場合、コードオーナーによる承認を削除: コードオーナーがマージリクエストを承認し、その後のコミットでコードオーナーであるファイルの変更が行われた場合、その承認は削除されます。
マージリクエストの承認設定を編集する
単一プロジェクトのマージリクエストの承認設定を表示または編集するには、次の手順に従います:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > マージリクエストを選択します。
- 承認を展開します。
インスタンスまたはトップレベルグループから設定をカスケードする
承認ルール設定の管理を簡素化するには、可能な限り広範なレベルで承認ルールを構成します。作成されたルールは、次のようになります:
- インスタンスの場合、インスタンス上のすべてのグループとプロジェクトに適用されます。
- トップレベルグループでは、すべてのサブグループとプロジェクトに適用されます。
グループまたはプロジェクトが設定を継承する場合、継承元のグループまたはプロジェクトで設定を変更することはできません。設定は、トップレベルグループまたはインスタンスの発信元で変更する必要があります。
マージリクエストの作成者による承認を防止する
デフォルトでは、マージリクエストの作成者(作成者)はそれを承認できません。この設定を変更するには、次の手順に従います:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > マージリクエストを選択します。
- マージリクエストの承認セクションで、承認の設定までスクロールし、Prevent approval by merge request creator (author)(マージリクエストの作成者による承認を防止する)チェックボックスをオフにします。
- 変更を保存を選択します。
作成者は、個々のマージリクエストで承認ルールを編集し、この設定をオーバーライドできます。ただし、次のいずれかのオプションを構成しない限り、オーバーライドできます:
- プロジェクトのPrevent overrides of default approvals(デフォルトの承認のオーバーライドを禁止)します。
- *(GitLab Self-Managedインスタンスのみ)*デフォルトの承認をインスタンスに対してオーバーライドすることを禁止します。インスタンスに対して構成されている場合、プロジェクトまたは個々のマージリクエストでこの設定を編集することはできません。
コミットを追加したユーザーによる承認を防ぐ
デフォルトでは、マージリクエストにコミットするユーザー (コミッター) は引き続き承認できます。プロジェクトまたはインスタンスのコミッターが、部分的に彼ら自身のものであるマージリクエストを承認することを防げます:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > マージリクエストを選択します。
- マージリクエストの承認セクションで、承認の設定までスクロールし、**コミットを追加したユーザーによる承認を防ぎます。**を選択します。このチェックボックスがオフになっている場合、管理者はインスタンスに対して承認を無効にしています。したがって、プロジェクトに対する承認を変更することはできません。
- 変更を保存を選択します。
マージリクエストにコミットするコードオーナーは、マージリクエストが自分のファイルに影響を与える場合、それを承認できません。
詳しくは、Gitの公式ドキュメントをご覧ください。
マージリクエストが、最初に変更をコミットしたユーザー以外のユーザーによってリベースされた場合、コミット履歴は新しいコミッターで書き換えられます。これにより、以前にマージリクエストで変更をコミットしたユーザーが、コミッターではなくなったため、変更を承認できるようになる場合があります。
リベース後の承認も参照してください
マージリクエストでの承認ルールの編集を禁止する
デフォルトでは、ユーザーはマージリクエストごとにプロジェクト用に作成した承認ルールをオーバーライドできます。ユーザーがマージリクエストで承認ルールを変更しないようにする場合は、この設定を無効にできます:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > マージリクエストを選択します。
- マージリクエストの承認セクションで、承認の設定までスクロールし、**マージリクエストの承認ルールの編集を防ぎます。**を選択します。
- 変更を保存を選択します。
この変更は、開いているすべてのマージリクエストに影響します。
このフィールドを変更すると、設定によっては、開いているすべてのマージリクエストに影響を与える可能性があります:
- ユーザーが以前に承認ルールを編集できた場合に、この動作を無効にすると、GitLabはすべての開いているマージリクエストを更新して、承認ルールを適用します。
- ユーザーが以前に承認ルールを編集できなかった場合に、承認ルールの編集を有効にすると、開いているマージリクエストは変更されません。これにより、これらのマージリクエストですでに行われた承認ルールへの変更が保持されます。
承認のために、ユーザーの再認証を要求する
GitLab Self-Managedでは、SAML認証を使用した再認証の要求はデフォルトで使用可能です。この機能を非表示にするために、管理者はff_require_saml_auth_to_approveという名前の機能フラグを無効にできます。GitLab.comおよびGitLab Dedicatedでは、この機能を使用できます。
承認者は、最初にSAMLまたはパスワードで認証することを強制できます。この権限により、連邦規則集(CFR)パート11で定義されているものなど、承認のための電子署名が有効になります。
前提要件:
- この設定は、トップレベルグループでのみ使用できます。
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- パスワード認証とSAML認証を有効にします。詳細については、次を参照してください:
- パスワード認証については、サインイン制限のドキュメントを参照してください。
- GitLab.comグループのSAML認証については、GitLab.comグループのSAML SSOドキュメントを参照してください。
- GitLab Self-ManagedインスタンスのSAML認証については、GitLab Self-ManagedのSAML SSOを参照してください。
- 左側のサイドバーで、設定 > マージリクエストを選択します。
- マージリクエストの承認セクションで、承認の設定までスクロールし、承認するにはユーザーの再認証が必要を選択します。
- 変更を保存を選択します。
ソースブランチにコミットが追加されたときに、すべての承認を削除する
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
デフォルトでは、承認後にさらに変更を追加すると、マージリクエストの承認は削除されます。
GitLabは、マージリクエストで差分を識別するためにgit patch-idを使用します。この値は、適度に安定した固有識別子となります。この値により、マージリクエスト内で承認をリセットする際に、よりスマートな意思決定が可能になります。マージリクエストに新しい変更をプッシュすると、以前のpatch-idに対してpatch-idが評価され、承認をリセットする必要があるかどうかが判断されます。これにより、フィーチャーブランチでgit rebaseやgit merge <target>などのコマンドを実行するときに、GitLabはより適切なリセットの決定を行うことができます。
変更がマージリクエストに追加された後も既存の承認を保持するには、次の手順に従います:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > マージリクエストを選択します。
- マージリクエストの承認セクションで、承認の設定までスクロールし、すべての承認を削除チェックボックスをオフにします。
- 変更を保存を選択します。
マージリクエストの作成と承認を自動化する場合は、マージリクエストを承認する前に、コミットが完全に処理されるようにロジックを組み込みます。これにより、意図しない承認のリセットを防ぐことができます。詳細については、自動化されたマージリクエストの承認を参照してください。
コードオーナーによる承認を、そのファイルが変更された場合に削除する
新しいコミットでファイルが変更されたコードオーナーからの承認のみを削除するには、次を実行します:
前提要件:
- プロジェクトのメンテナーロール以上が必要です。
これを行うには、次の手順に従います:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > マージリクエストを選択します。
- マージリクエストの承認セクションで、承認の設定までスクロールし、ファイルが変更された場合、コードオーナーによる承認を削除を選択します。
- 変更を保存を選択します。