- 响应
- 列出仓库提交
- 创建一个包含多个文件和动作的提交
- 获取单个提交
- 获取提交被推送到的引用
- 获取提交的序列
- 选择性提交
- 撤销提交
- 获取提交的差异
- 获取提交的评论
- 发布提交评论
- 获取提交的讨论
- 提交状态
- 列出与提交相关的合并请求
- 获取提交签名
{{< details >}}
- Tier: 基础版, 专业版, 旗舰版
- Offering: JihuLab.com, 私有化部署
{{< /details >}}
该 API 操作 仓库提交。阅读更多关于极狐GitLab 特定信息 的提交。
响应
此 API 的响应中的某些日期字段是或可能看起来是重复的信息:
-
created_at
字段仅用于与其他极狐GitLab API 的一致性。它始终与committed_date
字段相同。 -
committed_date
和authored_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 | 按顺序列出提交。可能的值:default 、topo 。默认为 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_branch 或 start_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_branch 或 start_sha 的新提交覆盖目标分支 |
actions[] 属性 |
类型 | 必需 | 描述 |
---|---|---|---|
action |
string | yes | 要执行的动作:create 、delete 、move 、update 或 chmod 。 |
file_path |
string | yes | 文件的完整路径。例如:lib/class.rb 。 |
previous_path |
string | no | 被移动文件的原始完整路径。例如 lib/class1.rb 。仅在 move 动作中考虑。 |
content |
string | no | 文件内容,除 delete 、chmod 和 move 外所有动作都需要。未指定 content 的移动动作保留现有文件内容,任何其他 content 值都会覆盖文件内容。 |
encoding |
string | no |
text 或 base64 。默认是 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"
}
获取提交被推送到的引用
获取提交被推送到的所有引用(来自分支或标签)。分页参数 page
和 per_page
可用于限制引用列表。
GET /projects/:id/repository/commits/:sha/refs
参数:
属性 | 类型 | 必需 | 描述 |
---|---|---|---|
id |
integer/string | yes | 项目 ID 或 URL 编码的项目路径 |
sha |
string | yes | 提交哈希 |
type |
string | no | 提交范围。可能的值:branch 、tag 、all 。默认为 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、path
、line
,并且 line_type
应为 new
。
如果以下至少一个情况有效,则评论将添加到最后一次提交的末尾:
-
sha
是分支或标签,且line
或path
无效 -
line
号无效(不存在) -
path
无效(不存在)
在上述任何情况下,响应的 line
、line_type
和 path
设置为 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 | 行类型。接受 new 或 old 作为参数 |
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_id
、order_by
和sort
字段。
{{< /history >}}
列出项目中提交的状态。分页参数 page
和 per_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 | 用于排序状态的值。有效值为 id 和 pipeline_id 。默认为 id 。 |
sort |
string | No | 以升序或降序排序状态。有效值为 asc 和 desc 。默认为 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 | 状态的状态。可以是以下之一:pending 、running 、success 、failed 、canceled 、skipped
|
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"
}