{{< details >}}

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署

{{< /details >}}

该 API 操作 仓库提交。阅读更多关于极狐GitLab 特定信息 的提交。

响应

此 API 的响应中的某些日期字段是或可能看起来是重复的信息:

  • created_at 字段仅用于与其他极狐GitLab API 的一致性。它始终与 committed_date 字段相同。
  • committed_dateauthored_date 字段是从不同来源生成的,可能不相同。

列出仓库提交

{{< history >}}

  • 作者提交在极狐GitLab 15.10 中引入。

{{< /history >}}

获取项目中仓库提交的列表。

GET /projects/:id/repository/commits
属性 类型 必需 描述
id integer/string yes 项目 ID 或 URL 编码的项目路径
ref_name string no 仓库分支、标签或修订范围的名称,如果未给定,则为默认分支
since string no 仅返回此日期之后或当天的提交,采用 ISO 8601 格式 YYYY-MM-DDTHH:MM:SSZ
until string no 仅返回此日期之前或当天的提交,采用 ISO 8601 格式 YYYY-MM-DDTHH:MM:SSZ
path string no 文件路径
author string no 按提交作者搜索提交。
all boolean no 从仓库中检索所有提交
with_stats boolean no 每个提交的统计信息添加到响应中
first_parent boolean no 在看到合并提交时仅跟踪第一个父提交
order string no 按顺序列出提交。可能的值:defaulttopo。默认为 default,提交按时间逆序显示。
trailers boolean no 解析并包含每个提交的 Git trailers
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/commits"

示例响应:

[
  {
    "id": "ed899a2f4b50b4370feeea94676502b42383c746",
    "short_id": "ed899a2f4b5",
    "title": "Replace sanitize with escape once",
    "author_name": "Example User",
    "author_email": "user@example.com",
    "authored_date": "2021-09-20T11:50:22.001+00:00",
    "committer_name": "Administrator",
    "committer_email": "admin@example.com",
    "committed_date": "2021-09-20T11:50:22.001+00:00",
    "created_at": "2021-09-20T11:50:22.001+00:00",
    "message": "Replace sanitize with escape once",
    "parent_ids": [
      "6104942438c14ec7bd21c6cd5bd995272b3faff6"
    ],
    "web_url": "https://gitlab.example.com/janedoe/gitlab-foss/-/commit/ed899a2f4b50b4370feeea94676502b42383c746",
    "trailers": {},
    "extended_trailers": {}
  },
  {
    "id": "6104942438c14ec7bd21c6cd5bd995272b3faff6",
    "short_id": "6104942438c",
    "title": "Sanitize for network graph",
    "author_name": "randx",
    "author_email": "user@example.com",
    "committer_name": "ExampleName",
    "committer_email": "user@example.com",
    "created_at": "2021-09-20T09:06:12.201+00:00",
    "message": "Sanitize for network graph\nCc: John Doe <johndoe@gitlab.com>\nCc: Jane Doe <janedoe@gitlab.com>",
    "parent_ids": [
      "ae1d9fb46aa2b07ee9836d49862ec4e2c46fbbba"
    ],
    "web_url": "https://gitlab.example.com/janedoe/gitlab-foss/-/commit/ed899a2f4b50b4370feeea94676502b42383c746",
    "trailers": { "Cc": "Jane Doe <janedoe@gitlab.com>" },
    "extended_trailers": { "Cc": ["John Doe <johndoe@gitlab.com>", "Jane Doe <janedoe@gitlab.com>"] }
  }
]

创建一个包含多个文件和动作的提交

通过发布 JSON 有效负载来创建提交

POST /projects/:id/repository/commits
属性 类型 必需 描述
id integer/string yes 项目 ID 或 URL 编码的项目路径
branch string yes 要提交到的分支名称。要创建新分支,还提供 start_branchstart_sha,以及可选的 start_project
commit_message string yes 提交信息
start_branch string no 要从中创建新分支的分支名称
start_sha string no 要从中创建新分支的提交 SHA
start_project integer/string no 项目 ID 或 URL 编码的项目路径,默认值为 id
actions[] array yes 要作为批处理提交的动作哈希数组。请参阅下表了解它可以接受哪些属性。
author_email string no 指定提交作者的电子邮件地址
author_name string no 指定提交作者的名称
stats boolean no 包括提交统计信息。默认为 true
force boolean no true 时,将使用基于 start_branchstart_sha 的新提交覆盖目标分支
actions[] 属性 类型 必需 描述
action string yes 要执行的动作:createdeletemoveupdatechmod
file_path string yes 文件的完整路径。例如:lib/class.rb
previous_path string no 被移动文件的原始完整路径。例如 lib/class1.rb。仅在 move 动作中考虑。
content string no 文件内容,除 deletechmodmove 外所有动作都需要。未指定 content 的移动动作保留现有文件内容,任何其他 content 值都会覆盖文件内容。
encoding string no textbase64。默认是 text
last_commit_id string no 文件的最后已知提交 ID。仅在更新、移动和删除动作中考虑。
execute_filemode boolean no true/false 时启用/禁用文件上的执行标志。仅在 chmod 动作中考虑。
PAYLOAD=$(cat << 'JSON'
{
  "branch": "main",
  "commit_message": "some commit message",
  "actions": [
    {
      "action": "create",
      "file_path": "foo/bar",
      "content": "some content"
    },
    {
      "action": "delete",
      "file_path": "foo/bar2"
    },
    {
      "action": "move",
      "file_path": "foo/bar3",
      "previous_path": "foo/bar4",
      "content": "some content"
    },
    {
      "action": "update",
      "file_path": "foo/bar5",
      "content": "new content"
    },
    {
      "action": "chmod",
      "file_path": "foo/bar5",
      "execute_filemode": true
    }
  ]
}
JSON
)
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header "Content-Type: application/json" \
  --data "$PAYLOAD" \
  --url "https://gitlab.example.com/api/v4/projects/1/repository/commits"

示例响应:

{
  "id": "ed899a2f4b50b4370feeea94676502b42383c746",
  "short_id": "ed899a2f4b5",
  "title": "some commit message",
  "author_name": "Example User",
  "author_email": "user@example.com",
  "committer_name": "Example User",
  "committer_email": "user@example.com",
  "created_at": "2016-09-20T09:26:24.000-07:00",
  "message": "some commit message",
  "parent_ids": [
    "ae1d9fb46aa2b07ee9836d49862ec4e2c46fbbba"
  ],
  "committed_date": "2016-09-20T09:26:24.000-07:00",
  "authored_date": "2016-09-20T09:26:24.000-07:00",
  "stats": {
    "additions": 2,
    "deletions": 2,
    "total": 4
  },
  "status": null,
  "web_url": "https://gitlab.example.com/janedoe/gitlab-foss/-/commit/ed899a2f4b50b4370feeea94676502b42383c746"
}

极狐GitLab 支持 表单编码。以下是使用表单编码的提交 API 示例:

curl --request POST \
     --form "branch=main" \
     --form "commit_message=some commit message" \
     --form "start_branch=main" \
     --form "actions[][action]=create" \
     --form "actions[][file_path]=foo/bar" \
     --form "actions[][content]=</path/to/local.file" \
     --form "actions[][action]=delete" \
     --form "actions[][file_path]=foo/bar2" \
     --form "actions[][action]=move" \
     --form "actions[][file_path]=foo/bar3" \
     --form "actions[][previous_path]=foo/bar4" \
     --form "actions[][content]=</path/to/local1.file" \
     --form "actions[][action]=update" \
     --form "actions[][file_path]=foo/bar5" \
     --form "actions[][content]=</path/to/local2.file" \
     --form "actions[][action]=chmod" \
     --form "actions[][file_path]=foo/bar5" \
     --form "actions[][execute_filemode]=true" \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     "https://gitlab.example.com/api/v4/projects/1/repository/commits"

获取单个提交

通过提交哈希或分支或标签的名称获取特定提交。

GET /projects/:id/repository/commits/:sha

参数:

属性 类型 必需 描述
id integer/string yes 项目 ID 或 URL 编码的项目路径
sha string yes 仓库分支或标签的提交哈希或名称
stats boolean no 包括提交统计信息。默认为 true
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/commits/main"

示例响应:

{
  "id": "6104942438c14ec7bd21c6cd5bd995272b3faff6",
  "short_id": "6104942438c",
  "title": "Sanitize for network graph",
  "author_name": "randx",
  "author_email": "user@example.com",
  "committer_name": "Dmitriy",
  "committer_email": "user@example.com",
  "created_at": "2021-09-20T09:06:12.300+03:00",
  "message": "Sanitize for network graph",
  "committed_date": "2021-09-20T09:06:12.300+03:00",
  "authored_date": "2021-09-20T09:06:12.420+03:00",
  "parent_ids": [
    "ae1d9fb46aa2b07ee9836d49862ec4e2c46fbbba"
  ],
  "last_pipeline" : {
    "id": 8,
    "ref": "main",
    "sha": "2dc6aa325a317eda67812f05600bdf0fcdc70ab0",
    "status": "created"
  },
  "stats": {
    "additions": 15,
    "deletions": 10,
    "total": 25
  },
  "status": "running",
  "web_url": "https://gitlab.example.com/janedoe/gitlab-foss/-/commit/6104942438c14ec7bd21c6cd5bd995272b3faff6"
}

获取提交被推送到的引用

获取提交被推送到的所有引用(来自分支或标签)。分页参数 pageper_page 可用于限制引用列表。

GET /projects/:id/repository/commits/:sha/refs

参数:

属性 类型 必需 描述
id integer/string yes 项目 ID 或 URL 编码的项目路径
sha string yes 提交哈希
type string no 提交范围。可能的值:branchtagall。默认为 all
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/commits/5937ac0a7beb003549fc5fd26fc247adbce4a52e/refs?type=all"

示例响应:

[
  {"type": "branch", "name": "'test'"},
  {"type": "branch", "name": "add-balsamiq-file"},
  {"type": "branch", "name": "wip"},
  {"type": "tag", "name": "v1.1.0"}
 ]

获取提交的序列

{{< history >}}

  • 在极狐GitLab 16.9 中引入。

{{< /history >}}

通过从给定提交开始跟随父链接来获取项目中提交的序列号。

此 API 提供的功能与 git rev-list --count 命令对于给定提交 SHA 基本相同。

GET /projects/:id/repository/commits/:sha/sequence

参数:

属性 类型 必需 描述
id integer/string yes 项目 ID 或 URL 编码的项目路径
sha string yes 提交哈希。
first_parent boolean no 在看到合并提交时仅跟踪第一个父提交。

示例请求:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/commits/5937ac0a7beb003549fc5fd26fc247adbce4a52e/sequence"

示例响应:

{
  "count": 632
}

选择性提交

选择性提交一个提交到指定分支。

POST /projects/:id/repository/commits/:sha/cherry_pick

参数:

属性 类型 必需 描述
id integer/string yes 项目 ID 或 URL 编码的项目路径
sha string yes 提交哈希
branch string yes 分支名称
dry_run boolean no 不提交任何更改。默认为 false。
message string no 用于新提交的自定义提交信息。
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --form "branch=main" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/commits/main/cherry_pick"

示例响应:

{
  "id": "8b090c1b79a14f2bd9e8a738f717824ff53aebad",
  "short_id": "8b090c1b",
  "author_name": "Example User",
  "author_email": "user@example.com",
  "authored_date": "2016-12-12T20:10:39.000+01:00",
  "created_at": "2016-12-12T20:10:39.000+01:00",
  "committer_name": "Administrator",
  "committer_email": "admin@example.com",
  "committed_date": "2016-12-12T20:10:39.000+01:00",
  "title": "Feature added",
  "message": "Feature added\n\nSigned-off-by: Example User <user@example.com>\n",
  "parent_ids": [
    "a738f717824ff53aebad8b090c1b79a14f2bd9e8"
  ],
  "web_url": "https://gitlab.example.com/janedoe/gitlab-foss/-/commit/8b090c1b79a14f2bd9e8a738f717824ff53aebad"
}

在选择性提交失败的情况下,响应提供了关于原因的上下文:

{
  "message": "Sorry, we cannot cherry-pick this commit automatically. This commit may already have been cherry-picked, or a more recent commit may have updated some of its content.",
  "error_code": "empty"
}

在这种情况下,选择性提交失败,因为更改集为空,可能表明提交已存在于目标分支中。另一个可能的错误代码是 conflict,表示存在合并冲突。

当启用 dry_run 时,服务器尝试应用选择性提交但不实际提交任何结果更改。如果选择性提交应用成功,API 响应 200 OK

{
  "dry_run": "success"
}

在失败的情况下,显示的错误与没有干运行时失败的错误相同。

撤销提交

撤销给定分支中的提交。

POST /projects/:id/repository/commits/:sha/revert

参数:

属性 类型 必需 描述
id integer/string yes 项目 ID 或 URL 编码的项目路径
sha string yes 要撤销的提交 SHA
branch string yes 目标分支名称
dry_run boolean no 不提交任何更改。默认为 false。
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --form "branch=main" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/commits/a738f717824ff53aebad8b090c1b79a14f2bd9e8/revert"

示例响应:

{
  "id":"8b090c1b79a14f2bd9e8a738f717824ff53aebad",
  "short_id": "8b090c1b",
  "title":"Revert \"Feature added\"",
  "created_at":"2018-11-08T15:55:26.000Z",
  "parent_ids":["a738f717824ff53aebad8b090c1b79a14f2bd9e8"],
  "message":"Revert \"Feature added\"\n\nThis reverts commit a738f717824ff53aebad8b090c1b79a14f2bd9e8",
  "author_name":"Administrator",
  "author_email":"admin@example.com",
  "authored_date":"2018-11-08T15:55:26.000Z",
  "committer_name":"Administrator",
  "committer_email":"admin@example.com",
  "committed_date":"2018-11-08T15:55:26.000Z",
  "web_url": "https://gitlab.example.com/janedoe/gitlab-foss/-/commit/8b090c1b79a14f2bd9e8a738f717824ff53aebad"
}

在撤销失败的情况下,响应提供了关于原因的上下文:

{
  "message": "Sorry, we cannot revert this commit automatically. This commit may already have been reverted, or a more recent commit may have updated some of its content.",
  "error_code": "conflict"
}

在这种情况下,撤销失败,因为尝试撤销生成了合并冲突。另一个可能的错误代码是 empty,表示更改集为空,可能是由于更改已被撤销。

当启用 dry_run 时,服务器尝试应用撤销但不实际提交任何结果更改。如果撤销应用成功,API 响应 200 OK

{
  "dry_run": "success"
}

在失败的情况下,显示的错误与没有干运行时失败的错误相同。

获取提交的差异

获取项目中提交的差异。

GET /projects/:id/repository/commits/:sha/diff

参数:

属性 类型 必需 描述
id integer/string yes 项目 ID 或 URL 编码的项目路径
sha string yes 仓库分支或标签的提交哈希或名称
unidiff boolean no 以统一差异格式展示差异。默认为 false。在极狐GitLab 16.5 中 引入。
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/commits/main/diff"

示例响应:

[
  {
    "diff": "@@ -71,6 +71,8 @@\n sudo -u git -H bundle exec rake migrate_keys RAILS_ENV=production\n sudo -u git -H bundle exec rake migrate_inline_notes RAILS_ENV=production\n \n+sudo -u git -H bundle exec rake gitlab:assets:compile RAILS_ENV=production\n+\n ```\n \n ### 6. Update config files",
    "new_path": "doc/update/5.4-to-6.0.md",
    "old_path": "doc/update/5.4-to-6.0.md",
    "a_mode": null,
    "b_mode": "100644",
    "new_file": false,
    "renamed_file": false,
    "deleted_file": false
  }
]

获取提交的评论

获取项目中提交的评论。

GET /projects/:id/repository/commits/:sha/comments

参数:

属性 类型 必需 描述
id integer/string yes 项目 ID 或 URL 编码的项目路径
sha string yes 仓库分支或标签的提交哈希或名称
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/commits/main/comments"

示例响应:

[
  {
    "note": "this code is really nice",
    "author": {
      "id": 11,
      "username": "admin",
      "email": "admin@local.host",
      "name": "Administrator",
      "state": "active",
      "created_at": "2014-03-06T08:17:35.000Z"
    }
  }
]

发布提交评论

向提交添加评论。

要在特定文件的特定行发布评论,必须指定完整提交 SHA、pathline,并且 line_type 应为 new

如果以下至少一个情况有效,则评论将添加到最后一次提交的末尾:

  • sha 是分支或标签,且 linepath 无效
  • line 号无效(不存在)
  • path 无效(不存在)

在上述任何情况下,响应的 lineline_typepath 设置为 null

有关其他评论合并请求的方法,请参阅 Notes API 中的 创建新合并请求备注,以及 Discussions API 中的 在合并请求差异中创建新线程

POST /projects/:id/repository/commits/:sha/comments
属性 类型 必需 描述
id integer/string yes 项目 ID 或 URL 编码的项目路径
sha string yes 仓库分支或标签的提交 SHA 或名称
note string yes 评论的文本
path string no 相对于仓库的文件路径
line integer no 评论应该放置的行号
line_type string no 行类型。接受 newold 作为参数
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --form "note=Nice picture\!" \
  --form "path=README.md" \
  --form "line=11" \
  --form "line_type=new" \
  --url "https://gitlab.example.com/api/v4/projects/17/repository/commits/18f3e63d05582537db6d183d9d557be09e1f90c8/comments"

示例响应:

{
   "author" : {
      "web_url" : "https://gitlab.example.com/janedoe",
      "avatar_url" : "https://gitlab.example.com/uploads/user/avatar/28/jane-doe-400-400.png",
      "username" : "janedoe",
      "state" : "active",
      "name" : "Jane Doe",
      "id" : 28
   },
   "created_at" : "2016-01-19T09:44:55.600Z",
   "line_type" : "new",
   "path" : "README.md",
   "line" : 11,
   "note" : "Nice picture!"
}

获取提交的讨论

获取项目中提交的讨论。

GET /projects/:id/repository/commits/:sha/discussions

参数:

属性 类型 必需 描述
id integer/string yes 项目 ID 或 URL 编码的项目路径
sha string yes 仓库分支或标签的提交哈希或名称
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/commits/4604744a1c64de00ff62e1e8a6766919923d2b41/discussions"

示例响应:

[
  {
    "id": "4604744a1c64de00ff62e1e8a6766919923d2b41",
    "individual_note": true,
    "notes": [
      {
        "id": 334686748,
        "type": null,
        "body": "Nice piece of code!",
        "attachment": null,
        "author" : {
          "id" : 28,
          "name" : "Jane Doe",
          "username" : "janedoe",
          "web_url" : "https://gitlab.example.com/janedoe",
          "state" : "active",
          "avatar_url" : "https://gitlab.example.com/uploads/user/avatar/28/jane-doe-400-400.png"
        },
        "created_at": "2020-04-30T18:48:11.432Z",
        "updated_at": "2020-04-30T18:48:11.432Z",
        "system": false,
        "noteable_id": null,
        "noteable_type": "Commit",
        "resolvable": false,
        "confidential": null,
        "noteable_iid": null,
        "commands_changes": {}
      }
    ]
  }
]

提交状态

用于极狐GitLab 的提交状态 API。

列出提交的状态

{{< history >}}

  • 在极狐GitLab 17.9 中引入了 pipeline_idorder_bysort 字段。

{{< /history >}}

列出项目中提交的状态。分页参数 pageper_page 可用于限制引用列表。

GET /projects/:id/repository/commits/:sha/statuses
属性 类型 必需 描述
id integer/string Yes 项目 ID 或 URL 编码的项目路径
sha string Yes 提交的哈希。
ref string No 分支或标签的名称。默认为默认分支。
stage string No 构建阶段 筛选状态。例如,test
name string No 作业名称 筛选状态。例如,bundler:audit
pipeline_id integer No 按流水线 ID 筛选状态。例如,1234
order_by string No 用于排序状态的值。有效值为 idpipeline_id。默认为 id
sort string No 以升序或降序排序状态。有效值为 ascdesc。默认为 asc
all boolean No 包括所有状态而不是仅最新状态。默认为 false
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/17/repository/commits/18f3e63d05582537db6d183d9d557be09e1f90c8/statuses"

示例响应:

[
   ...

   {
      "status" : "pending",
      "created_at" : "2016-01-19T08:40:25.934Z",
      "started_at" : null,
      "name" : "bundler:audit",
      "allow_failure" : true,
      "author" : {
         "username" : "janedoe",
         "state" : "active",
         "web_url" : "https://gitlab.example.com/janedoe",
         "avatar_url" : "https://gitlab.example.com/uploads/user/avatar/28/jane-doe-400-400.png",
         "id" : 28,
         "name" : "Jane Doe"
      },
      "description" : null,
      "sha" : "18f3e63d05582537db6d183d9d557be09e1f90c8",
      "target_url" : "https://gitlab.example.com/janedoe/gitlab-foss/builds/91",
      "finished_at" : null,
      "id" : 91,
      "ref" : "main"
   },
   {
      "started_at" : null,
      "name" : "test",
      "allow_failure" : false,
      "status" : "pending",
      "created_at" : "2016-01-19T08:40:25.832Z",
      "target_url" : "https://gitlab.example.com/janedoe/gitlab-foss/builds/90",
      "id" : 90,
      "finished_at" : null,
      "ref" : "main",
      "sha" : "18f3e63d05582537db6d183d9d557be09e1f90c8",
      "author" : {
         "id" : 28,
         "name" : "Jane Doe",
         "username" : "janedoe",
         "web_url" : "https://gitlab.example.com/janedoe",
         "state" : "active",
         "avatar_url" : "https://gitlab.example.com/uploads/user/avatar/28/jane-doe-400-400.png"
      },
      "description" : null
   },

   ...
]

设置提交的流水线状态

添加或更新提交的流水线状态。如果提交与合并请求相关联,则 API 调用必须针对合并请求源分支中的提交。

POST /projects/:id/statuses/:sha
属性 类型 必需 描述
id integer/string yes 项目 ID 或 URL 编码的项目路径
sha string yes 提交 SHA
state string yes 状态的状态。可以是以下之一:pendingrunningsuccessfailedcanceledskipped
ref string no 状态引用的 ref(分支或标签)。必须不超过 255 个字符。
name or context string no 用于区分此状态与其他系统状态的标签。默认值为 default
target_url string no 与此状态关联的目标 URL。必须不超过 255 个字符。
description string no 状态的简短描述。必须不超过 255 个字符。
coverage float no 总代码覆盖率
pipeline_id integer no 要设置状态的流水线 ID。在同一 SHA 上有多个流水线时使用。
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/17/statuses/18f3e63d05582537db6d183d9d557be09e1f90c8?state=success"

示例响应:

{
   "author" : {
      "web_url" : "https://gitlab.example.com/janedoe",
      "name" : "Jane Doe",
      "avatar_url" : "https://gitlab.example.com/uploads/user/avatar/28/jane-doe-400-400.png",
      "username" : "janedoe",
      "state" : "active",
      "id" : 28
   },
   "name" : "default",
   "sha" : "18f3e63d05582537db6d183d9d557be09e1f90c8",
   "status" : "success",
   "coverage": 100.0,
   "description" : null,
   "id" : 93,
   "target_url" : null,
   "ref" : null,
   "started_at" : null,
   "created_at" : "2016-01-19T09:05:50.355Z",
   "allow_failure" : false,
   "finished_at" : "2016-01-19T09:05:50.365Z"
}

列出与提交相关的合并请求

返回最初引入特定提交的合并请求信息。

GET /projects/:id/repository/commits/:sha/merge_requests
属性 类型 必需 描述
id integer/string yes 项目 ID 或 URL 编码的项目路径
sha string yes 提交 SHA
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/commits/af5b13261899fb2c0db30abdd0af8b07cb44fdc5/merge_requests"

示例响应:

[
   {
      "id":45,
      "iid":1,
      "project_id":35,
      "title":"Add new file",
      "description":"",
      "state":"opened",
      "created_at":"2018-03-26T17:26:30.916Z",
      "updated_at":"2018-03-26T17:26:30.916Z",
      "target_branch":"main",
      "source_branch":"test-branch",
      "upvotes":0,
      "downvotes":0,
      "author" : {
        "web_url" : "https://gitlab.example.com/janedoe",
        "name" : "Jane Doe",
        "avatar_url" : "https://gitlab.example.com/uploads/user/avatar/28/jane-doe-400-400.png",
        "username" : "janedoe",
        "state" : "active",
        "id" : 28
      },
      "assignee":null,
      "source_project_id":35,
      "target_project_id":35,
      "labels":[ ],
      "draft":false,
      "work_in_progress":false,
      "milestone":null,
      "merge_when_pipeline_succeeds":false,
      "merge_status":"can_be_merged",
      "sha":"af5b13261899fb2c0db30abdd0af8b07cb44fdc5",
      "merge_commit_sha":null,
      "squash_commit_sha":null,
      "user_notes_count":0,
      "discussion_locked":null,
      "should_remove_source_branch":null,
      "force_remove_source_branch":false,
      "web_url":"https://gitlab.example.com/root/test-project/merge_requests/1",
      "time_stats":{
         "time_estimate":0,
         "total_time_spent":0,
         "human_time_estimate":null,
         "human_total_time_spent":null
      }
   }
]

获取提交签名

获取提交的 签名,如果它已签名。对于未签名的提交,结果为 404 响应。

GET /projects/:id/repository/commits/:sha/signature

参数:

属性 类型 必需 描述
id integer/string yes 项目 ID 或 URL 编码的项目路径
sha string yes 仓库分支或标签的提交哈希或名称
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/repository/commits/da738facbc19eb2fc2cef57c49be0e6038570352/signature"

如果提交是 GPG 签名的示例响应:

{
  "signature_type": "PGP",
  "verification_status": "verified",
  "gpg_key_id": 1,
  "gpg_key_primary_keyid": "8254AAB3FBD54AC9",
  "gpg_key_user_name": "John Doe",
  "gpg_key_user_email": "johndoe@example.com",
  "gpg_key_subkey_id": null,
  "commit_source": "gitaly"
}

示例响应,如果提交是使用 SSH 签名:

{
  "signature_type": "SSH",
  "verification_status": "verified",
  "key": {
    "id": 11,
    "title": "Key",
    "created_at": "2023-05-08T09:12:38.503Z",
    "expires_at": "2024-05-07T00:00:00.000Z",
    "key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILZzYDq6DhLp3aX84DGIV3F6Vf+Ae4yCTTz7RnqMJOlR MyKey)",
    "usage_type": "auth_and_signing"
  },
  "commit_source": "gitaly"
}

示例响应,如果提交是 X.509 签名:

{
  "signature_type": "X509",
  "verification_status": "unverified",
  "x509_certificate": {
    "id": 1,
    "subject": "CN=gitlab@example.org,OU=Example,O=World",
    "subject_key_identifier": "BC:BC:BC:BC:BC:BC:BC:BC:BC:BC:BC:BC:BC:BC:BC:BC:BC:BC:BC:BC",
    "email": "gitlab@example.org",
    "serial_number": 278969561018901340486471282831158785578,
    "certificate_status": "good",
    "x509_issuer": {
      "id": 1,
      "subject": "CN=PKI,OU=Example,O=World",
      "subject_key_identifier": "AB:AB:AB:AB:AB:AB:AB:AB:AB:AB:AB:AB:AB:AB:AB:AB:AB:AB:AB:AB",
      "crl_url": "http://example.com/pki.crl"
    }
  },
  "commit_source": "gitaly"
}

示例响应,如果提交是未签名:

{
  "message": "404 GPG Signature Not Found"
}