正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

保護ブランチAPI

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

このAPIを使用して、リポジトリのブランチ保護を管理します。

GitLab PremiumとGitLab Ultimateでは、ブランチへのプッシュに対する、よりきめ細かい保護がサポートされています。管理者は、特定のユーザーの代わりに、デプロイキーのみに保護ブランチを変更およびプッシュする権限を付与できます。

有効なアクセスレベル

ProtectedRefAccess.allowed_access_levelsメソッドは、次のアクセスレベルを定義します。

  • 0: アクセスなし
  • 30: デベロッパーロール
  • 40: メンテナーロール
  • 60: 管理者

保護ブランチのリスト

UIで定義されているように、プロジェクトから保護されたブランチのリストを取得します。ワイルドカードが設定されている場合、そのワイルドカードに一致するブランチの正確な名前の代わりに、ワイルドカードが返されます。

GET /projects/:id/protected_branches

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのID、またはURLエンコードされたパス
search文字列いいえ検索する保護ブランチの名前または名前の一部。

成功した場合は、200 OKと以下のレスポンス属性が返されます。

属性説明
allow_force_pushブール値trueの場合、このブランチで強制プッシュが許可されます。
code_owner_approval_requiredブール値trueの場合、このブランチへのプッシュにはコードオーナーの承認が必要です。
id整数保護ブランチのID。
inheritedブール値trueの場合、保護設定は親グループから継承されます。PremiumおよびUltimateのみ。
merge_access_levels配列マージアクセスレベルの設定の配列。
merge_access_levels[].access_level整数マージのアクセスレベル。
merge_access_levels[].access_level_description文字列アクセスレベルの人にとって読みやすい説明。
merge_access_levels[].group_id整数マージアクセスを持つグループのID。PremiumおよびUltimateのみ。
merge_access_levels[].id整数マージアクセスレベルの設定のID。
merge_access_levels[].user_id整数マージアクセスを持つユーザーのID。PremiumおよびUltimateのみ。
name文字列保護ブランチの名前。
push_access_levels配列プッシュアクセスレベルの設定の配列。
push_access_levels[].access_level整数プッシュのアクセスレベル。
push_access_levels[].access_level_description文字列アクセスレベルの人にとって読みやすい説明。
push_access_levels[].deploy_key_id整数プッシュアクセスを持つデプロイキーのID。
push_access_levels[].group_id整数プッシュアクセスを持つグループのID。PremiumおよびUltimateのみ。
push_access_levels[].id整数プッシュアクセスレベルの設定のID。
push_access_levels[].user_id整数プッシュアクセスを持つユーザーのID。PremiumおよびUltimateのみ。

次のリクエストの例では、プロジェクトIDは5です。

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/protected_branches"

次の応答例を示します。

  • IDが100101の2つの保護ブランチ。
  • IDが10011002、および1003push_access_levels
  • IDが20012002merge_access_levels
[
  {
    "id": 100,
    "name": "main",
    "push_access_levels": [
      {
        "id":  1001,
        "access_level": 40,
        "access_level_description": "Maintainers"
      },
      {
        "id": 1002,
        "access_level": 40,
        "access_level_description": "Deploy key",
        "deploy_key_id": 1
      }
    ],
    "merge_access_levels": [
      {
        "id":  2001,
        "access_level": 40,
        "access_level_description": "Maintainers"
      }
    ],
    "allow_force_push":false,
    "code_owner_approval_required": false
  },
  {
    "id": 101,
    "name": "release/*",
    "push_access_levels": [
      {
        "id":  1003,
        "access_level": 40,
        "access_level_description": "Maintainers"
      }
    ],
    "merge_access_levels": [
      {
        "id":  2002,
        "access_level": 40,
        "access_level_description": "Maintainers"
      }
    ],
    "allow_force_push":false,
    "code_owner_approval_required": false
  }
]

GitLab PremiumまたはUltimateのユーザーには、user_idgroup_id、およびinheritedのパラメータも表示されます。inheritedパラメータが存在する場合、設定はプロジェクトのグループから継承されました。

次の応答例を示します。

  • ID 100の1つの保護ブランチ。
  • IDが10011002push_access_levels
  • IDが2001merge_access_levels
[
  {
    "id": 101,
    "name": "main",
    "push_access_levels": [
      {
        "id":  1001,
        "access_level": 40,
        "user_id": null,
        "group_id": null,
        "access_level_description": "Maintainers"
      },
      {
        "id": 1002,
        "access_level": 40,
        "access_level_description": "Deploy key",
        "deploy_key_id": 1,
        "user_id": null,
        "group_id": null
      }
    ],
    "merge_access_levels": [
      {
        "id":  2001,
        "access_level": null,
        "user_id": null,
        "group_id": 1234,
        "access_level_description": "Example Merge Group"
      }
    ],
    "allow_force_push":false,
    "code_owner_approval_required": false,
    "inherited": true
  }
]

単一の保護ブランチまたはワイルドカード保護ブランチを取得します

単一の保護ブランチまたはワイルドカード保護ブランチを取得します。

GET /projects/:id/protected_branches/:name

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのID、またはURLエンコードされたパス
name文字列はいブランチまたはワイルドカードの名前。

成功した場合は、200 OKと以下のレスポンス属性が返されます。

属性説明
allow_force_pushブール値trueの場合、このブランチで強制プッシュが許可されます。
code_owner_approval_requiredブール値trueの場合、このブランチへのプッシュにはコードオーナーの承認が必要です。
id整数保護ブランチのID。
merge_access_levels配列マージアクセスレベルの設定の配列。
merge_access_levels[].access_level整数マージのアクセスレベル。
merge_access_levels[].access_level_description文字列アクセスレベルの人にとって読みやすい説明。
merge_access_levels[].group_id整数マージアクセスを持つグループのID。PremiumおよびUltimateのみ。
merge_access_levels[].id整数マージアクセスレベルの設定のID。
merge_access_levels[].user_id整数マージアクセスを持つユーザーのID。PremiumおよびUltimateのみ。
name文字列保護ブランチの名前。
push_access_levels配列プッシュアクセスレベルの設定の配列。
push_access_levels[].access_level整数プッシュのアクセスレベル。
push_access_levels[].access_level_description文字列アクセスレベルの人にとって読みやすい説明。
push_access_levels[].group_id整数プッシュアクセスを持つグループのID。PremiumおよびUltimateのみ。
push_access_levels[].id整数プッシュアクセスレベルの設定のID。
push_access_levels[].user_id整数プッシュアクセスを持つユーザーのID。PremiumおよびUltimateのみ。

次のリクエストの例では、プロジェクトIDは5、ブランチ名はmainです。

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/protected_branches/main"

レスポンス例:

{
  "id": 101,
  "name": "main",
  "push_access_levels": [
    {
      "id":  1001,
      "access_level": 40,
      "access_level_description": "Maintainers"
    }
  ],
  "merge_access_levels": [
    {
      "id":  2001,
      "access_level": 40,
      "access_level_description": "Maintainers"
    }
  ],
  "allow_force_push":false,
  "code_owner_approval_required": false
}

GitLab PremiumまたはUltimateのユーザーには、user_idおよびgroup_idのパラメータも表示されます。

レスポンス例:

{
  "id": 101,
  "name": "main",
  "push_access_levels": [
    {
      "id":  1001,
      "access_level": 40,
      "user_id": null,
      "group_id": null,
      "access_level_description": "Maintainers"
    }
  ],
  "merge_access_levels": [
    {
      "id":  2001,
      "access_level": null,
      "user_id": null,
      "group_id": 1234,
      "access_level_description": "Example Merge Group"
    }
  ],
  "allow_force_push":false,
  "code_owner_approval_required": false
}

リポジトリのブランチを保護する

単一のリポジトリブランチ、またはワイルドカード保護ブランチを使用して複数のプロジェクトリポジトリブランチを保護します。

POST /projects/:id/protected_branches

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのID、またはURLエンコードされたパス
name文字列はいブランチまたはワイルドカードの名前。
allow_force_pushブール値いいえtrueの場合、このブランチにプッシュできるメンバーは、強制プッシュもできます。デフォルトはfalseです。
allowed_to_merge配列いいえマージアクセスレベルの配列。それぞれが{user_id: integer}{group_id: integer}、または{access_level: integer}の形式のハッシュで記述されています。PremiumおよびUltimateのみ。
allowed_to_push配列いいえプッシュアクセスレベルの配列。それぞれが{user_id: integer}{group_id: integer}{deploy_key_id: integer}、または{access_level: integer}の形式のハッシュで記述されています。PremiumおよびUltimateのみ。
allowed_to_unprotect配列いいえ保護解除アクセスレベルの配列。それぞれが{user_id: integer}{group_id: integer}、または{access_level: integer}の形式のハッシュで記述されています。アクセスレベルNo accessは、このフィールドでは使用できません。PremiumおよびUltimateのみ。
code_owner_approval_requiredブール値いいえtrueの場合、CODEOWNERSファイルの項目と一致する場合、このブランチへのプッシュを防ぎます。デフォルトはfalseです。PremiumおよびUltimateのみ。
merge_access_level整数いいえマージを許可するアクセスレベル。デフォルトは40(メンテナーロール)です。
push_access_level整数いいえプッシュを許可するアクセスレベル。デフォルトは40(メンテナーロール)です。
unprotect_access_level整数いいえ保護解除を許可するアクセスレベル。デフォルトは40(メンテナーロール)です。

成功した場合は、201 Createdと以下のレスポンス属性が返されます。

属性説明
allow_force_pushブール値trueの場合、このブランチで強制プッシュが許可されます。
code_owner_approval_requiredブール値trueの場合、このブランチへのプッシュにはコードオーナーの承認が必要です。
id整数保護ブランチのID。
merge_access_levels配列マージアクセスレベルの設定の配列。
merge_access_levels[].access_level整数マージのアクセスレベル。
merge_access_levels[].access_level_description文字列アクセスレベルの人にとって読みやすい説明。
merge_access_levels[].group_id整数マージアクセスを持つグループのID。PremiumおよびUltimateのみ。
merge_access_levels[].id整数マージアクセスレベルの設定のID。
merge_access_levels[].user_id整数マージアクセスを持つユーザーのID。PremiumおよびUltimateのみ。
name文字列保護ブランチの名前。
push_access_levels配列プッシュアクセスレベルの設定の配列。
push_access_levels[].access_level整数プッシュのアクセスレベル。
push_access_levels[].access_level_description文字列アクセスレベルの人にとって読みやすい説明。
push_access_levels[].deploy_key_id整数プッシュアクセスを持つデプロイキーのID。
push_access_levels[].group_id整数プッシュアクセスを持つグループのID。PremiumおよびUltimateのみ。
push_access_levels[].id整数プッシュアクセスレベルの設定のID。
push_access_levels[].user_id整数プッシュアクセスを持つユーザーのID。PremiumおよびUltimateのみ。
unprotect_access_levels配列保護解除アクセスレベルの設定の配列。
unprotect_access_levels[].access_level整数保護解除のアクセスレベル。
unprotect_access_levels[].access_level_description文字列アクセスレベルの人にとって読みやすい説明。
unprotect_access_levels[].group_id整数保護解除アクセスを持つグループのID。PremiumおよびUltimateのみ。
unprotect_access_levels[].id整数保護解除アクセスレベルの設定のID。
unprotect_access_levels[].user_id整数保護解除アクセスを持つユーザーのID。PremiumおよびUltimateのみ。

次のリクエストの例では、プロジェクトIDは5で、ブランチ名は*-stableです。

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/protected_branches?name=*-stable&push_access_level=30&merge_access_level=30&unprotect_access_level=40"

応答の例を次に示します。

  • ID 101の保護ブランチ。
  • IDが1001push_access_levels
  • IDが2001merge_access_levels
  • IDが3001unprotect_access_levels
{
  "id": 101,
  "name": "*-stable",
  "push_access_levels": [
    {
      "id":  1001,
      "access_level": 30,
      "access_level_description": "Developers + Maintainers"
    }
  ],
  "merge_access_levels": [
    {
      "id":  2001,
      "access_level": 30,
      "access_level_description": "Developers + Maintainers"
    }
  ],
  "unprotect_access_levels": [
    {
      "id":  3001,
      "access_level": 40,
      "access_level_description": "Maintainers"
    }
  ],
  "allow_force_push":false,
  "code_owner_approval_required": false
}

GitLab PremiumまたはUltimateのユーザーには、user_idgroup_idのパラメータも表示されます。

次の応答例を示します。

  • ID 101の保護ブランチ。
  • IDが1001push_access_levels
  • IDが2001merge_access_levels
  • IDが3001unprotect_access_levels
{
  "id": 1,
  "name": "*-stable",
  "push_access_levels": [
    {
      "id":  1001,
      "access_level": 30,
      "user_id": null,
      "group_id": null,
      "access_level_description": "Developers + Maintainers"
    }
  ],
  "merge_access_levels": [
    {
      "id":  2001,
      "access_level": 30,
      "user_id": null,
      "group_id": null,
      "access_level_description": "Developers + Maintainers"
    }
  ],
  "unprotect_access_levels": [
    {
      "id":  3001,
      "access_level": 40,
      "user_id": null,
      "group_id": null,
      "access_level_description": "Maintainers"
    }
  ],
  "allow_force_push":false,
  "code_owner_approval_required": false
}

ユーザープッシュアクセスとグループマージアクセスの例

  • プラン: Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

allowed_to_push / allowed_to_merge / allowed_to_unprotect配列の要素は、{user_id: integer}{group_id: integer}、または{access_level: integer}の形式をとる必要があります。各ユーザーはプロジェクトへのアクセス権を持ち、各グループはこのプロジェクトを共有する必要があります。これらのアクセスレベルにより、保護ブランチへのアクセスをよりきめ細かく制御できます。詳細については、グループ権限を設定するを参照してください。

次のリクエストの例では、ユーザープッシュアクセスとグループマージアクセスを持つ保護ブランチを作成します。user_id2で、group_id3です。

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/protected_branches?name=*-stable&allowed_to_push%5B%5D%5Buser_id%5D=2&allowed_to_merge%5B%5D%5Bgroup_id%5D=3"

次の応答例を示します。

  • ID 101の保護ブランチ。
  • IDが1001push_access_levels
  • IDが2001merge_access_levels
  • IDが3001unprotect_access_levels
{
  "id": 101,
  "name": "*-stable",
  "push_access_levels": [
    {
      "id":  1001,
      "access_level": null,
      "user_id": 2,
      "group_id": null,
      "access_level_description": "Administrator"
    }
  ],
  "merge_access_levels": [
    {
      "id":  2001,
      "access_level": null,
      "user_id": null,
      "group_id": 3,
      "access_level_description": "Example Merge Group"
    }
  ],
  "unprotect_access_levels": [
    {
      "id":  3001,
      "access_level": 40,
      "user_id": null,
      "group_id": null,
      "access_level_description": "Maintainers"
    }
  ],
  "allow_force_push":false,
  "code_owner_approval_required": false
}

デプロイキーアクセスの例

  • プラン: Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

allowed_to_push配列の要素は、{user_id: integer}{group_id: integer}{deploy_key_id: integer}、または{access_level: integer}の形式をとる必要があります。デプロイキーは、プロジェクトに対して有効になっており、プロジェクトリポジトリへの書き込みアクセス権を持っている必要があります。その他の要件については、保護ブランチへのプッシュをアクセスするためにデプロイキーを許可するを参照してください。

リクエスト例:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/protected_branches?name=*-stable&allowed_to_push[][deploy_key_id]=1"

次の応答例を示します。

  • ID 101の保護ブランチ。
  • IDが1001push_access_levels
  • IDが2001merge_access_levels
  • IDが3001unprotect_access_levels
{
  "id": 101,
  "name": "*-stable",
  "push_access_levels": [
    {
      "id":  1001,
      "access_level": null,
      "user_id": null,
      "group_id": null,
      "deploy_key_id": 1,
      "access_level_description": "Deploy"
    }
  ],
  "merge_access_levels": [
    {
      "id":  2001,
      "access_level": 40,
      "user_id": null,
      "group_id": null,
      "access_level_description": "Maintainers"
    }
  ],
  "unprotect_access_levels": [
    {
      "id":  3001,
      "access_level": 40,
      "user_id": null,
      "group_id": null,
      "access_level_description": "Maintainers"
    }
  ],
  "allow_force_push":false,
  "code_owner_approval_required": false
}

プッシュとマージを許可するアクセスの例

  • プラン: Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

リクエスト例:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "name": "main",
    "allowed_to_push": [
      {"access_level": 30}
    ],
    "allowed_to_merge": [
      {"access_level": 30},
      {"access_level": 40}
    ]
  }' \
  --url "https://gitlab.example.com/api/v4/projects/5/protected_branches"

次の応答例を示します。

  • ID 105の保護ブランチ。
  • IDが1001push_access_levels
  • IDが20012002merge_access_levels
  • IDが3001unprotect_access_levels
{
    "id": 105,
    "name": "main",
    "push_access_levels": [
        {
            "id": 1001,
            "access_level": 30,
            "access_level_description": "Developers + Maintainers",
            "user_id": null,
            "group_id": null
        }
    ],
    "merge_access_levels": [
        {
            "id": 2001,
            "access_level": 30,
            "access_level_description": "Developers + Maintainers",
            "user_id": null,
            "group_id": null
        },
        {
            "id": 2002,
            "access_level": 40,
            "access_level_description": "Maintainers",
            "user_id": null,
            "group_id": null
        }
    ],
    "unprotect_access_levels": [
        {
            "id": 3001,
            "access_level": 40,
            "access_level_description": "Maintainers",
            "user_id": null,
            "group_id": null
        }
    ],
    "allow_force_push":false,
    "code_owner_approval_required": false
}

保護解除アクセスアクセスレベルの例

  • プラン: Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

特定のグループのみがブランチを保護解除できる保護ブランチを作成するには:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "name": "production",
    "allowed_to_unprotect": [
      {"group_id": 789}
    ]
  }' \
  --url "https://gitlab.example.com/api/v4/projects/5/protected_branches"

複数の種類のユーザーがブランチを保護解除できるようにするには:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "name": "main",
    "allowed_to_unprotect": [
      {"user_id": 123},
      {"group_id": 456},
      {"access_level": 40}
    ]
  }' \
  --url "https://gitlab.example.com/api/v4/projects/5/protected_branches"

この設定では、これらのユーザーはブランチを保護解除できます。

  • ID 123のユーザー。
  • ID 456のグループのメンバー。
  • 少なくともメンテナーロール(アクセスレベル40)を持つユーザー。

リポジトリのブランチの保護を解除する

指定された保護ブランチまたはワイルドカード保護ブランチを保護解除します。

DELETE /projects/:id/protected_branches/:name

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのID、またはURLエンコードされたパス
name文字列はいブランチの名前。

成功すると、204 No Contentを返します。

次のリクエストの例では、プロジェクトIDは5で、ブランチ名は*-stableです。

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/protected_branches/*-stable"

保護ブランチを更新する

保護ブランチを更新します。

PATCH /projects/:id/protected_branches/:name

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのID、またはURLエンコードされたパス
name文字列はいブランチまたはワイルドカードの名前。
allow_force_pushブール値いいえtrueの場合、このブランチにプッシュできるメンバーは、強制プッシュもできます。
allowed_to_merge配列いいえマージアクセスレベルの配列。それぞれが{user_id: integer}{group_id: integer}、または{access_level: integer}の形式のハッシュで記述されています。PremiumおよびUltimateのみ。
allowed_to_push配列いいえプッシュアクセスレベルの配列。それぞれが{user_id: integer}{group_id: integer}{deploy_key_id: integer}、または{access_level: integer}の形式のハッシュで記述されています。PremiumおよびUltimateのみ。
allowed_to_unprotect配列いいえ保護解除アクセスレベルの配列。それぞれが{user_id: integer}{group_id: integer}{access_level: integer}、または既存のアクセスレベルを削除するための{id: integer, _destroy: true}の形式のハッシュで記述されています。アクセスレベルNo accessは、このフィールドでは使用できません。PremiumおよびUltimateのみ。
code_owner_approval_requiredブール値いいえtrueの場合、CODEOWNERSファイルの項目と一致する場合、このブランチへのプッシュを防ぎます。PremiumおよびUltimateのみ。

成功した場合は、200 OKと以下のレスポンス属性が返されます。

属性説明
allow_force_pushブール値trueの場合、このブランチで強制プッシュが許可されます。
code_owner_approval_requiredブール値trueの場合、このブランチへのプッシュにはコードオーナーの承認が必要です。
id整数保護ブランチのID。
merge_access_levels配列マージアクセスレベルの設定の配列。
merge_access_levels[].access_level整数マージのアクセスレベル。
merge_access_levels[].access_level_description文字列アクセスレベルの人にとって読みやすい説明。
merge_access_levels[].group_id整数マージアクセスを持つグループのID。PremiumおよびUltimateのみ。
merge_access_levels[].id整数マージアクセスレベルの設定のID。
merge_access_levels[].user_id整数マージアクセスを持つユーザーのID。PremiumおよびUltimateのみ。
name文字列保護ブランチの名前。
push_access_levels配列プッシュアクセスレベルの設定の配列。
push_access_levels[].access_level整数プッシュのアクセスレベル。
push_access_levels[].access_level_description文字列アクセスレベルの人にとって読みやすい説明。
push_access_levels[].deploy_key_id整数プッシュアクセスを持つデプロイキーのID。
push_access_levels[].group_id整数プッシュアクセスを持つグループのID。PremiumおよびUltimateのみ。
push_access_levels[].id整数プッシュアクセスレベルの設定のID。
push_access_levels[].user_id整数プッシュアクセスを持つユーザーのID。PremiumおよびUltimateのみ。
unprotect_access_levels配列保護解除アクセスレベルの設定の配列。
unprotect_access_levels[].access_level整数保護解除のアクセスレベル。
unprotect_access_levels[].access_level_description文字列アクセスレベルの人にとって読みやすい説明。
unprotect_access_levels[].group_id整数保護解除アクセスを持つグループのID。PremiumおよびUltimateのみ。
unprotect_access_levels[].id整数保護解除アクセスレベルの設定のID。
unprotect_access_levels[].user_id整数保護解除アクセスレベルを持つユーザーのID。PremiumおよびUltimateのみ。

リクエスト例:

curl --request PATCH \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/protected_branches/feature-branch?allow_force_push=true&code_owner_approval_required=true"

allowed_to_pushallowed_to_merge、およびallowed_to_unprotectの配列内の要素は、user_idgroup_id、またはaccess_levelのいずれかであり、{user_id: integer}{group_id: integer}、または{access_level: integer}の形式を取ります。

allowed_to_pushには追加の要素deploy_key_idが含まれており、{deploy_key_id: integer}の形式を取ります。

更新するには:

  • user_id: 更新されたユーザーがプロジェクトへのアクセスレベルを持っていることを確認してください。それぞれのハッシュで、access_levelidも渡す必要があります。
  • group_id: 更新されたグループがこのプロジェクトを共有していることを確認してください。それぞれのハッシュで、access_levelidも渡す必要があります。
  • deploy_key_id: デプロイキーがプロジェクトで有効になっていること、およびプロジェクトリポジトリへの書き込みアクセスレベルを持っていることを確認してください。

削除するには、_destroytrueに設定して渡す必要があります。次の例を参照してください。

例: push_access_levelレコードを作成する

curl --header 'Content-Type: application/json' --request PATCH \
  --data '{"allowed_to_push": [{"access_level": 40}]}' \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/22034114/protected_branches/main"

レスポンス例:

{
   "name": "main",
   "push_access_levels": [
      {
         "id": 12,
         "access_level": 40,
         "access_level_description": "Maintainers",
         "user_id": null,
         "group_id": null
      }
   ]
}

例: push_access_levelレコードを更新する

curl --header 'Content-Type: application/json' --request PATCH \
  --data '{"allowed_to_push": [{"id": 12, "access_level": 0}]}' \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/22034114/protected_branches/main"

レスポンス例:

{
   "name": "main",
   "push_access_levels": [
      {
         "id": 12,
         "access_level": 0,
         "access_level_description": "No One",
         "user_id": null,
         "group_id": null
      }
   ]
}

例: push_access_levelレコードを削除する

curl --header 'Content-Type: application/json' --request PATCH \
  --data '{"allowed_to_push": [{"id": 12, "_destroy": true}]}' \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/22034114/protected_branches/main"

レスポンス例:

{
   "name": "main",
   "push_access_levels": []
}

例: unprotect_access_levelレコードを更新する

前提要件:

  • このAPIを呼び出すユーザーは、allowed_to_unprotect設定に含まれている必要があります。
  • user_idで指定されたユーザーは、プロジェクトメンバーである必要があります。
  • group_idで指定されたグループは、プロジェクトへのアクセスレベルを持っている必要があります。

既存の保護ブランチを誰が保護解除できるかを変更するには、既存のアクセスレベルレコードのidを含めます。次に例を示します。

curl --request PATCH \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "allowed_to_unprotect": [
      {"id": 17486, "user_id": 3791}
    ]
  }' \
  --url "https://gitlab.example.com/api/v4/projects/5/protected_branches/main"

特定のアクセスレベルを削除するには、_destroy: trueを使用します。