# 分支
如果使用 project_full_path,确保 project_full_path 编码过,例子:/api/v3/projects/tencent/code--> /api/v3/projects/tencent%2Fcode (/ 编码 %2F) 分支已支持按照类别进行分类。
目前支持的类别有Mainline, Feature, Personal, Release, Hotfix, Develop, Bugfix, Collaboration, Pre-production, Production, Environment, Experimental和Others
# 创建项目分支
在项目里面创建分支
POST /api/v3/projects/:id/repository/branches
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| branch_name | string | 分支名 |
| ref | string | ref可以是已存在的SHA, branch name, tag name |
| description | string(可选) | 分支描述 |
| branch_type | string(可选) | 分支类别,默认为Others |
返回值:
{
"name": "123456",
"protected": false,
"developers_can_push": false,
"developers_can_merge": false,
"commit": {
"id": "6269835cafdd2356d8b8d4a4e3738c79206c1d06",
"message": "test",
"parent_ids": [
"12345fa022906668338166ce7f2e7bf35d502285"
],
"authored_date": "2012-02-01T06:18:54+0000",
"author_name": "git_user2",
"author_email": "git_user2@tencent.com",
"committed_date": "2012-02-01T06:18:54+0000",
"committer_name": "git_user2",
"committer_email": "git_user2@tencent.com",
"title": "test",
"created_at": "2012-02-01T06:18:54+0000",
"short_id": "6269835c"
},
"description": "",
"branch_type": {
"name": "Others",
"color": "#7F8C8D"
}
}
# 修改分支
编辑给定项目的某个分支
注意:如果项目内已存在Mainline分支,则不允许将其他分支设置成Mainline类别
PUT /api/v3/projects/:id/repository/branches/:branch
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| branch | string | 分支名 |
| description | string(可选) | 分支描述 |
| branch_type | string(可选) | 分支类别,比如Mainline, Feature, Others等等 |
返回值:
{
"name": "123456",
"protected": false,
"developers_can_push": false,
"developers_can_merge": false,
"commit": {
"id": "6269835cafdd2356d8b8d4a4e3738c79206c1d06",
"message": "test",
"parent_ids": [
"12345fa022906668338166ce7f2e7bf35d502285"
],
"authored_date": "2012-02-01T06:18:54+0000",
"author_name": "git_user2",
"author_email": "git_user2@tencent.com",
"committed_date": "2012-02-01T06:18:54+0000",
"committer_name": "git_user2",
"committer_email": "git_user2@tencent.com",
"title": "test",
"created_at": "2012-02-01T06:18:54+0000",
"short_id": "6269835c"
},
"description": "",
"branch_type": {
"name": "Others",
"color": "#7F8C8D"
}
}
# 删除分支
删除项目版本库分支
DELETE /api/v3/projects/:id/repository/branches/:branch
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| branch | string | 分支 名 |
返回值:
{
"name": "删除分支",
"commit": {
"parent_ids": [
"666962c91e3b03983a1fe310f9e16219ca616d11"
],
"id": "3e3f3d2fb64102f997757aef19bd5413e9f523e1",
"title": "更新文件",
"author_name": "git_user1",
"author_email": "git_user1@tencent.com",
"created_at": "2024-08-29T08:24:02+0000",
"message": "更新文件 ",
"authored_date": "2024-08-29T08:24:02+0000",
"committer_name": "git_user1",
"committer_email": "git_user1@tencent.com",
"committed_date": "2024-08-29T08:24:02+0000",
"short_id": "3e3f3d2f"
},
"protected": false,
"developers_can_push": false,
"developers_can_merge": false,
"description": "",
"created_at": "2024-09-04T02:38:44+0000",
"author": {
"id": 1,
"username": "git_user1",
"web_url": "https://git.tencent.com/u/git_user1",
"name": "test",
"state": "active",
"avatar_url": "https://assets.code.tencent.com/common/images/avatar/default_user_avatar.png"
},
"branch_type": {
"name": "Others",
"color": "#7F8C8D"
}
}
# 批量删除分支
批量删除项目版本库分支
DELETE /api/v3/projects/:id/repository/branches
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| branch_names | string | 分支名 删除多个分支用&连接即可最大值为 100例如:branch_names=test1&branch_names=test2 |
返回值:
{
"branch_names": [
"test1",
"test2"
]
}
# 分支列表
返回项目版本库分支列表,按字母顺序排序
GET /api/v3/projects/:id/repository/branches
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| search | string(可选) | 搜索条件,模糊匹配分支名 |
| page | integer(可选) | 分页(默认值:1) |
| per_page | integer(可选) | 默认页面大小(默认:20,最大:100) |
| order_by | string(可选) | 返回列表的排序字段,可选可选字段:name、updated_at(默认) |
| sort | string(可选) | order_by 的排序顺序 ,可选可选字段:asc、desc(默认) |
| branch_type | string(可选) | 分支类别:比如Mainline, Feature, Others等等 |
| author_id | integer(可选) | 创建者 id |
返回值:
[
{
"name": "fenzhi01",
"protected": false,
"developers_can_push": false,
"developers_can_merge": false,
"commit": {
"id": "e99ab09234cfa855a129305e7960261cf145950a",
"message": "提交测试",
"parent_ids": [
"e9c5aa72c9e22592ee2611d896b730c1a95cc339"
],
"authored_date": "2011-03-03T00:01:05+0000",
"author_name": "git_user1",
"author_email": "git_user1@tencent.com",
"committed_date": "2011-03-03T00:01:05+0000",
"committer_name": "git_user1",
"committer_email": "git_user1@tencent.com",
"title": "nihaoshijie",
"created_at": "2011-03-03T00:01:05+0000",
"short_id": "e99ab092"
},
"description": "",
"created_at": "2011-03-03T00:01:05+0000",
"branch_type": {
"name": "Others",
"color": "#7F8C8D"
},
"author": {
"id": 76291,
"username": "git_user1",
"web_url": "http://git.tencent.com/u/git_user1",
"name": "git_user1",
"state": "active",
"avatar_url": "http://git.tencent.com/assets/images/avatar/no_user_avatar.png"
}
},
{
"name": "fenzhi02",
"protected": false,
"developers_can_push": false,
"developers_can_merge": false,
"commit": {
"id": "9bd9d12cbab4260bdd9d38fe1140a6cdac7cd2ea",
"message": "test",
"parent_ids": [
"1230a4610ca01dd10cb5bc30d8a1b1eab98c09a1"
],
"authored_date": "2011-09-19T09:09:14+0000",
"author_name": "git_user1",
"author_email": "git_user1@tencent.com",
"committed_date": "2011-09-19T09:09:14+0000",
"committer_name": "git_user1",
"committer_email": "git_user1@tencent.com",
"title": "666",
"created_at": "2011-09-19T09:09:14+0000",
"short_id": "9bd9d12c"
},
"description": "",
"created_at": "2011-09-19T09:09:14+0000",
"branch_type": {
"name": "Others",
"color": "#7F8C8D"
},
"author": {
"id": 76291,
"username": "git_user1",
"web_url": "http://git.tencent.com/u/git_user1",
"name": "git_user1",
"state": "active",
"avatar_url": "http://git.tencent.com/assets/images/avatar/no_user_avatar.png"
}
}
]
# 获取分支详情
返回项目版本库某个分支详情
GET /api/v3/projects/:id/repository/branches/:branch
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| branch | string | 分支名 |
返回值:
{
"name": "master",
"protected": true,
"developers_can_push": false,
"developers_can_merge": false,
"commit": {
"id": "d21f748b73507a227a92c954bd3c89bf4e78e897",
"message": "Merge branch 'fenzhi01' into 'master'\r\n\r\nxxx\r\n\r\nxxx\r\n\r\nSee merge request !7",
"parent_ids": [
"9bd9d12crgd4260bdd9d38fe1140a6cdac7cd2ea",
"e99db05604cfa385a129305e7660261cf161950a"
],
"authored_date": "2012-01-01T01:11:11+0000",
"author_name": "git_user1",
"author_email": "git_user1@tencent.com",
"committed_date": "2012-01-01T01:11:11+0000",
"committer_name": "git_user1",
"committer_email": "git_user2",
"title": "Merge branch 'fenzhi01' into 'master'",
"created_at": "2012-01-01T01:11:11+0000",
"short_id": "d21f748b"
},
"description": "",
"created_at": "2012-01-01T01:11:11+0000",
"branch_type": {
"name": "Others",
"color": "#7F8C8D"
},
"author": {
"id": 76291,
"username": "git_user1",
"web_url": "http://git.tencent.com/u/git_user1",
"name": "git_user1",
"state": "active",
"avatar_url": "http://git.tencent.com/assets/images/avatar/no_user_avatar.png"
}
}
# 获取非保护分支评审规则
GET /api/v3/projects/:id/branch/config
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
返回值:
{
"merge_request_template": "1",
"allow_merge_commits": false,
"allow_squash_merging": true,
"allow_rebase_merging": true,
"default_merge_method": 1,
"merge_request_must_link_tapd_tickets": true,
"push_reset_enabled": false,
"push_reset_rule": 0,
"auto_create_review_after_push": true,
"can_approve_by_creator": false,
"forbidden_modify_rule": true,
"approver_rule": 100,
"necessary_approver_rule": 100,
"path_reviewer_rules": "test",
"free_path_rules": "add",
"forbidden_add_necessary_reviewer": false,
"force_add_labels_in_note": true,
"review_check": true,
"resolved_check": true,
"only_merge_manager_merge": true,
"merge_manager": "8875",
"owners_review_enabled": true,
"author_skip_owners_rule": false,
"initial_owners_min_count": 1,
"necessary_reviewers": [],
"reviewers": [
"8875"
]
}
# 修改非保护分支评审规则
PUT /api/v3/projects/:id/branch/config
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| only_merge_manager_merge | boolean(可选) | 仅允许合并负责人合并 |
| merge_request_must_link_tapd_tickets | boolean(可选) | 合并请求是否必须绑定 TAPD 单 |
| commit_mr_check | boolean(可选) | 合并请求未被批准时,如果新提交涉及合并请求的更改,则阻止推送代码 |
| review_check | boolean(可选) | 合并请求必须经过代码评审才可合并 |
| push_reset_enabled | boolean(可选) | 当源分支有新提交时,评审状态将有状态变更 |
| push_reset_rule | integer(可选) | 可选值: 0:当前评审状态为已通过时,重置所有评审人的批准 1:将重置所有评审人的批准 2:重置被修改文件的 OWNERS 的批准 |
| allow_merge_commits | boolean(可选) | 是否允许 merge_commits 合并代码 |
| allow_squash_merging | boolean(可选) | 是否允许 squash_merging 合并代码 |
| allow_rebase_merging | boolean(可选) | 是否允许 rebase_merging 合并代码 |
| default_merge_method | integer(可选) | 默认合并方式 |
| merge_request_template | string(可选) | 合并请求模板 |
| merge_manager | string(可选) | 合并负责人,有效值:"0","-1","-2""单个用户 id" "0": 不设置; "-1": 仅允许合并请求的创建人合并; "-2": 仅允许某个用户合并; |
| merge_manager_assignee | string(可选) | 当 merge_manager=-2,该参数输入"单个用户 id": 仅允许某个用户合并; |
| auto_create_review_after_push | boolean(可选) | 推送后自动创建代码评审单 |
| can_approve_by_creator | boolean(可选) | 创建者是否可以自己通过评审 |
| forbidden_modify_rule | boolean(可选) | 是否禁止在创建评审时修改评审规则 |
| force_add_labels_in_note | boolean(可选) | 评审评论是否必须分类 |
| resolved_check | boolean(可选) | 所有"未解决"评论都解决后才能通过代码评审 |
| owners_review_enabled | boolean(可选) | 是否对文件启用 OWNERS 评审 |
| initial_owners_min_count | integer(可选) | 每个文件的最小 OWNER 推荐数量 |
| author_skip_owners_rule | boolean(可选) | 是否开启作者为 owner 的豁免 |
| approver_rule | integer(可选) | 审批人规则 -1:所有评审人通过, 1:单评审通过, 2+:多评审通过 |
| necessary_approver_rule | integer(可选) | 必要审批人规则 -1:所有必要评审人通过, 1:单必要评审通过, 2+:多必要评审通过, 0: 没有必要评审人 |
| reviewers | string(可选) | 评审人 id |
| necessary_reviewers | string(可选) | 必要评审人 id |
| path_reviewer_rules | string(可选) | 路径评委规则 |
| free_path_rules | string(可选) | 评审时无需关注的路径 |
| forbidden_add_necessary_reviewer | boolean(可选) | 是否禁止创建者手动添加必要评审人 |
# 修改非保护分支持证评审规则
注意:需要 master 及以上权限,请将参数以 json 的格式放置在 request 请求体中.
PUT /api/v3/projects/:id/certified_reviewer_config
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| allow_certified_approver_enabled | boolean | 持证评审开关 true/false |
| certified_language_rules | string[] | 持证评审的证书语言配置,参考下面的 certified_language_rules |
certified_language_rules 参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| enable | Boolean | 语言开关 true/false |
| language | string | 语言列表("C++"/"Go"/"Java"/"JavaScript/TypeScript"/"Objective-C"/"Python") |
| extended_suffix | string[] | 拓展文件后缀"txt","pdf"等 |
Body 举例:
{
"allow_certified_approver_enabled":true,
"certified_language_rules":[
{
"language": "c++",
"extended_suffix": ["text"],
"enable": true
},
{
"language": "Go",
"extended_suffix": [],
"enable": false
}
]
}
返回值:
{
"id": 10625560,
"description": null,
"public": false,
"archived": false,
"visibility_level": 10,
"public_visibility": 100,
"namespace": {
"created_at": "2021-12-20T03:38:03+0000",
"description": "利用 api 修改子项目组的描述信息",
"id": 460907,
"name": "test-panshisubgrou",
"owner_id": null,
"path": "panshi-api",
"updated_at": "2021-12-20T03:38:03+0000"
},
"name": "web-panshi",
"name_with_namespace": "GROUP-TEST1/test-panshi/test-panshisubgrou/web-panshi",
"path": "web",
"path_with_namespace": "GROUP-TEST1/panshi-api/panshi-api/web",
"default_branch": "master",
"ssh_url_to_repo": "git@git.tencent.com:GROUP-TEST1/panshi-api/panshi-api/web.git",
"http_url_to_repo": "http://git.tencent.com/GROUP-TEST1/panshi-api/panshi-api/web.git",
"https_url_to_repo": "https://git.tencent.com/GROUP-TEST1/panshi-api/panshi-api/web.git",
"web_url": "https://git.tencent.com/GROUP-TEST1/panshi-api/panshi-api/web",
"tag_list": [],
"concatOwners": null,
"issues_enabled": true,
"merge_requests_enabled": true,
"wiki_enabled": false,
"snippets_enabled": true,
"review_enabled": true,
"fork_enabled": true,
"tag_name_regex": null,
"tag_create_push_level": 30,
"branch_name_regex": null,
"created_at": "2021-12-23T01:41:05+0000",
"last_activity_at": "2022-04-08T06:45:55+0000",
"creator_id": 75422,
"avatar_url": "https://git.tencent.com/uploads/project/avatar/10625560",
"watchs_count": 0,
"stars_count": 0,
"forks_count": 0,
"config_storage": {
"limit_lfs_file_size": 51200.0,
"limit_size": 512000.0,
"limit_file_size": 100.0,
"limit_lfs_size": 512000.0
},
"config_confidential": {
"level": -1,
"allow_ai_coding_tool": true
},
"forked_from_project": {
"path": "web",
"path_with_namespace": "GROUP-TEST1/panshi-api/web",
"name": "web-panshi",
"id": 10623255,
"name_with_namespace": "GROUP-TEST1/test-panshi/web-panshi"
},
"statistics": {
"commit_count": 17,
"lfs_repository_size": 0.0,
"repository_size": 0.01
},
"suggestion_reviewers": [
{
"id": 8875,
"username": "git02",
"web_url": "https://git.tencent.com/u/git02",
"name": "git02",
"state": "active",
"avatar_url": "https://git.tencent.com/uploads/user/avatar/8875/f42534786c4f463b887d027425875f29.jpeg"
},
{
"id": 385488,
"username": "git01",
"web_url": "https://git.tencent.com/u/git01",
"name": "git01",
"state": "active",
"avatar_url": "https://git.tencent.com/assets/images/avatar/no_user_avatar.png"
}
],
"necessary_reviewers": [],
"path_reviewer_rules": "",
"approver_rule": 2,
"necessary_approver_rule": 0,
"commit_mr_check": false,
"review_check": false,
"can_approve_by_creator": true,
"auto_create_review_after_push": true,
"forbidden_modify_rule": false,
"force_add_labels_in_note": true,
"resolved_check": false,
"push_reset_enabled": true,
"merge_request_template": "%commit_msg%",
"file_owner_path_rules": null,
"created_from_id": null,
"template_repository": false,
"allow_certified_approver_enabled": true,
"certified_approver_rule": 1,
"certificate_level": "IREAD",
"certified_language_rules": [
{
"extended_suffix": [
"text"
],
"default_suffix": [
"cpp",
"cc",
"cxx",
"c++"
],
"enable": true,
"language": "C++"
},
{
"extended_suffix": [],
"default_suffix": [
"go"
],
"enable": false,
"language": "Go"
},
{
"extended_suffix": [],
"default_suffix": [
"java"
],
"enable": true,
"language": "Java"
},
{
"extended_suffix": [],
"default_suffix": [
"js",
"jsx"
],
"enable": true,
"language": "JavaScript"
},
{
"extended_suffix": [],
"default_suffix": [
"ts",
"tsx"
],
"enable": true,
"language": "TypeScript"
},
{
"extended_suffix": [],
"default_suffix": [
"m",
"swift",
"mm"
],
"enable": true,
"language": "Objective-C"
},
{
"extended_suffix": [],
"default_suffix": [
"py"
],
"enable": true,
"language": "Python"
}
]
}
# 获取保护分支详情
返回项目版本库某个保护分支详情
GET /api/v3/projects/:id/repository/branches/:branch/protect
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| branch | string | 分支名 |
返回值:
{
"protected": true,
"developers_can_push": false,
"developers_can_merge": false,
"suggestion_reviewers": [],
"necessary_reviewers": [],
"name": "master",
"commit": {
"id": "d21f748b73507a227a92c954bd3c89bf4e78e897",
"message": "Merge branch 'fenzhi01' into 'master'\r\n\r\nxxx\r\n\r\nxxx\r\n\r\nSee merge request !7",
"parent_ids": [
"9bd9d12crgd4260bdd9d38fe1140a6cdac7cd2ea",
"e99db05604cfa385a129305e7660261cf161950a"
],
"authored_date": "2012-01-01T01:11:11+0000",
"author_name": "git_user1",
"author_email": "git_user1@tencent.com",
"committed_date": "2012-01-01T01:11:11+0000",
"committer_name": "git_user1",
"committer_email": "git_user2",
"title": "Merge branch 'fenzhi01' into 'master'",
"created_at": "2012-01-01T01:11:11+0000",
"short_id": "d21f748b"
},
"commit_force": false,
"push_reset_enabled": true,
"can_approve_by_creator": true,
"push_create_review": false,
"forbidden_modify_rule": false,
"note_label": false,
"approver_rule": 1,
"necessary_approver_rule": 0,
"merge_request_template": null,
"path_reviewer_rules": "",
"push_access_level": 0,
"merge_access_level": 40,
"file_owner_path_rules": "*.md review owner=username1",
"merge_request_must_link_tapd_tickets": true,
"allow_merge_commits": true,
"allow_squash_merging": true,
"allow_rebase_merging": false,
"rule_id": 36152,
"review_check": false,
"merge_manager": "0",
"commit_reset": false,
"creator_can_approve": true,
"rule_modify": false,
"path_reviewer": "",
"mr_template": "%commit_msg%",
"commit_reset": false,
"creator_can_approve": true,
"rule_modify": false,
"path_reviewer": "",
"mr_template": "%commit_msg%"
}
# 将分支变为保护分支
项目版本库某个分支变为受保护的分支
注意: 保护分支功能已迁移至规则组,本接口在后续版本中可能会删除,建议尽快迁移,可参考旧的保护分支接口兼容
注意:当 push_access_level 有传入值时,会覆盖 developers_can_push 值。当没有传入值时,会使用 developers_can_push 值;
当项目的"代码评审"设置 (工蜂页面:设置 -> 基础设置 -> 特性设置 -> 代码评审) 未开启时,对以下字段的设置将不会生效: commit_reset、commit_force、review_check、approver_rule、necessary_approver_rule、suggestion_reviewer、necessary_reviewer、 path_reviewer、creator_can_approve、push_create_review、rule_modify、note_label
当 merge_access_level 有值传入时,会覆盖 developers_can_merge 值。当没有传入值时,会使用 developers_can_merge 值
如果 branch 包含特殊字符,确保 branch 进行过 encodeURIComponent 编码,例子:feature/function1 --> feature%2Ffunction1。
PUT /api/v3/projects/:id/repository/branches/:branch/protect
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| branch | string | 分支 名 |
| developers_can_push | boolean(可选) | developer角色是否能够 推送 (默认:false) (即将废弃,请使用 push_access_level) |
| developers_can_merge | boolean(可选) | developer角色是否能够 合并 (默认:false) (即将废弃,请使用 merge_access_level) |
| push_access_level | integer(可选) | 推送权限级别,有效值:0,30,40。(默认取 0) 0 :Only Branch Members(Except Reporters); 30:Above Developer + Branch Members(Except Reporters); 40:Above Master + Branch Members(Except Reporters) |
| merge_access_level | integer(可选) | 合并权限级别,有效值:0,3,30,40。 (默认取 40) 0 :Only Branch Members(Except Reporters); 3 :Only the Merge Manager; 30:Above Developer + Branch Members(Except Reporters); 40:Above Master + Branch Members(Except Reporters) |
| commit_force | boolean(可选) | 合并请求未被批准时,如果新提交涉及合并请求的更改,是否阻止推送代码。 (默认取项目配置) |
| commit_reset | boolean(可选) | 当源分支有新提交时,评审状态将有状态变更 (默认取项目配置) |
| commit_reset_rule | integer(可选) | 有效值:0,1, 2 0:当前评审状态为已通过时,重置所有评审人的批准 1:将重置所有评审人的批准 2:重置被修改文件的 owners 的批准 |
| review_check | boolean(可选) | 合并请求必须经过代码评审才可合并 (默认 false) |
| creator_can_approve | boolean(可选) | 创建者是否可以通过评审 (默认取项目配置) |
| push_create_review | boolean(可选) | Push 之后是否自动创建代码评审单 (默认取项目配置) |
| rule_modify | boolean(可选) | 是否禁止在创建评审时修改评审规则 (默认取项目配置) |
| note_label | boolean(可选) | 评审评论时是否需进行标签分类 (默认取项目配置) |
| resolved_check | boolean(可选) | 所有"未解决"评论都解决后才能通过代码评审 (默认 false) |
| auto_create_review_pre_push | boolean(可选) | 推送启用 Pre-Push 模式 (默认 false) |
| approver_rule | integer(可选) | 审批人规则 (默认取项目配置) -1:所有评审人通过,1:单评审通过,2+:多评审通过 |
| necessary_approver_rule | integer(可选) | 必要审批人规则 (默认取项目配置) -1:所有必要评审人通过,1:单必要评审通过,2+:多必要评审通过,0: 没有必要评审人 |
| suggestion_reviewer | string(可选) | 评审人 id (默认取项目配置) (只能是 id。多个评审人请用英文逗号分隔) |
| necessary_reviewer | string(可选) | 必要评审人 id (默认取项目配置) (只能是 id。多个评审人请用英文逗号分隔) |
| path_reviewer | string(可选) | 路径评委规则 (默认取项目配置) *.js review reviewer=username1,username2 necessary_reviewer=username3,username4 test.java review reviewer=git_user1,git_user2 necessary_reviewer=git_user1,git_user2 |
| mr_template | string(可选) | 合并请求模板 (默认取项目配置) |
| allow_merge_commits | boolean(可选) | 是否允许 merge_commits 合并代码 (默认取项目配置) |
| allow_squash_merging | boolean(可选) | 是否允许 squash_merging 合并代码 (默认取项目配置) |
| allow_rebase_merging | boolean(可选) | 是否允许 rebase_merging 合并代码 (默认取项目配置) |
| merge_manager | string(可选) | 合并负责人,有效值:"0","-1","单个用户 id" (默认取项目配置) "0": 不设置; "-1": 仅允许合并请求的创建人合并; "单个用户 id": 仅允许某个用户合并; |
返回值:
{
"protected": true,
"developers_can_push": false,
"developers_can_merge": false,
"suggestion_reviewers": [],
"necessary_reviewers": [],
"name": "master",
"commit": {
"id": "e9fb4410a293dfb84435278ed6e7ad22a569ddc7",
"message": "df",
"parent_ids": [],
"authored_date": "2019-07-15T07:47:55+0000",
"author_name": "git_user1",
"author_email": "git_user1g@tencent.com",
"committed_date": "2019-07-15T07:47:55+0000",
"committer_name": "git_user1",
"committer_email": "git_user1@tencent.com",
"title": "dff",
"created_at": "2019-07-15T07:47:55+0000",
"short_id": "e9fb4410"
},
"commit_force": false,
"push_reset_enabled": true,
"commit_reset": true,
"commit_reset_rule": 0,
"can_approve_by_creator": false,
"creator_can_approve": false,
"auto_create_review_after_push": false,
"push_create_review": false,
"forbidden_modify_rule": false,
"rule_modify": false,
"note_label": false,
"approver_rule": 1,
"necessary_approver_rule": 0,
"merge_request_template": "%commit_msg%",
"mr_template": "%commit_msg%",
"path_reviewer_rules": "",
"path_reviewer": "",
"file_owner_path_rules": null,
"push_access_level": 0,
"auto_create_review_pre_push": false,
"review_check": false,
"resolved_check": false,
"merge_manager": "0",
"merge_request_must_link_tapd_tickets": false,
"allow_merge_commits": true,
"allow_squash_merging": true,
"allow_rebase_merging": true,
"default_merge_method": 0,
"rule_id": 678956,
"merge_access_level": 40
}
# 修改保护分支基础设置
修改已经存在的保护分支的基础设置
如果 branch 包含特殊字符,确保 branch 进行过 encodeURIComponent 编码,例子:feature/function1 --> feature%2Ffunction1。
注意: 保护分支功能已迁移至规则组,本接口在后续版本中可能会删除,建议尽快迁移,可参考旧的保护分支接口兼容
注意:当 push_access_level 有传入值时,会覆盖 developers_can_push 值。当没有传入值时,会使用 developers_can_push 值;
当项目的"代码评审"设置 (工蜂页面:设置 -> 基础设置 -> 特性设置 -> 代码评审) 未开启时,对以下字段的设置将不会生效: commit_reset、commit_force、review_check、approver_rule、necessary_approver_rule、suggestion_reviewer、necessary_reviewer、 path_reviewer、creator_can_approve、push_create_review、rule_modify、note_label、resolved_check、auto_create_review_pre_push
当 merge_access_level 有值传入时,会覆盖 developers_can_merge 值。当没有传入值时,会使用 developers_can_merge 值
PUT /api/v3/projects/:id/repository/branches/:branch/config
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| branch | string | 分支 名 |
| developers_can_push | boolean(可选) | developer角色是否能够 推送 |
| developers_can_merge | boolean(可选) | developer角色是否能够 合并 |
| push_access_level | integer(可选) | 推送权限级别,有效值:0,30,40。 0 :Only Branch Members(Except Reporters); 30:Above Developer + Branch Members(Except Reporters); 40:Above Master + Branch Members(Except Reporters) |
| merge_access_level | integer(可选) | 合并权限级别,有效值:0,3,30,40。 0 :Only Branch Members(Except Reporters); 3 :Only the Merge Manager; 30:Above Developer + Branch Members(Except Reporters); 40:Above Master + Branch Members(Except Reporters) |
| commit_force | boolean(可选) | 合并请求未被批准时,如果新提交涉及合并请求的更改,是否阻止推送代码。 |
| commit_reset | boolean(可选) | 当源分支有新提交时,评审状态将有状态变更 (默认取项目配置) |
| commit_reset_rule | integer(可选) | 有效值:0,1, 2 0:当前评审状态为已通过时,重置所有评审人的批准 1:将重置所有评审人的批准 2:重置被修改文件的 owners 的批准 |
| review_check | boolean(可选) | 合并请求必须经过代码评审才可合并 |
| creator_can_approve | boolean(可选) | 创建者是否可以通过评审 |
| push_create_review | boolean(可选) | Push 之后是否自动创建代码评审单 |
| rule_modify | boolean(可选) | 是否禁止在创建评审时修改评审规则 |
| note_label | boolean(可选) | 评审评论时是否需进行标签分类 |
| resolved_check | boolean(可选) | 所有"未解决"评论都解决后才能通过代码评审 |
| auto_create_review_pre_push | boolean(可选) | 推送启用 Pre-Push 模式 |
| approver_rule | integer(可选) | 审批人规则 -1:所有评审人通过,1:单评审通过,2+:多评审通过 |
| necessary_approver_rule | integer(可选) | 必要审批人规则 -1:所有必要评审人通过,1:单必要评审通过,2+:多必要评审通过,0: 没有必要评审人 |
| suggestion_reviewer | string(可选) | 评审人 id (只能是 id。多个评审人请用英文逗号分隔) |
| necessary_reviewer | string(可选) | 必要评审人 id (只能是 id。多个评审人请用英文逗号分隔) |
| path_reviewer | string(可选) | 路径评委规则 *.js review reviewer=username1,username2 necessary_reviewer=username3,username4\r\ntest.java review reviewer=git_user1,git_user2 necessary_reviewer=git_user1,git_user2 |
| mr_template | string(可选) | 合并请求模板 |
| allow_merge_commits | boolean(可选) | 是否允许 merge_commits 合并代码 (默认取项目配置) |
| allow_squash_merging | boolean(可选) | 是否允许 squash_merging 合并代码 (默认取项目配置) |
| allow_rebase_merging | boolean(可选) | 是否允许 rebase_merging 合并代码 (默认取项目配置) |
| merge_manager | string(可选) | 合并负责人,有效值:"0","-1","单个用户 id" "0": 不设置; "-1": 仅允许合并请求的创建人合并; "单个用户 id": 仅允许某个用户合并; |
返回值:
{
"protected": true,
"developers_can_push": false,
"developers_can_merge": false,
"suggestion_reviewers": [
{
"id": 80041,
"username": "git_user2",
"web_url": "https://git.tencent.com/u/yinbohe",
"name": "yinbohe",
"state": "active",
"avatar_url": "https://git.tencent.com/assets/images/avatar/no_user_avatar.png"
}
],
"necessary_reviewers": [],
"name": "master",
"commit": {
"id": "e9fb4410a293dfb84435278ed6e7ad22a569ddc7",
"message": "df",
"parent_ids": [],
"authored_date": "2019-07-15T07:47:55+0000",
"author_name": "git_user1",
"author_email": "git_user1g@tencent.com",
"committed_date": "2019-07-15T07:47:55+0000",
"committer_name": "git_user1",
"committer_email": "git_user1@tencent.com",
"title": "dff",
"created_at": "2019-07-15T07:47:55+0000",
"short_id": "e9fb4410"
},
"commit_force": false,
"push_reset_enabled": true,
"commit_reset": true,
"commit_reset_rule": 1,
"can_approve_by_creator": false,
"creator_can_approve": false,
"auto_create_review_after_push": false,
"push_create_review": false,
"forbidden_modify_rule": false,
"rule_modify": false,
"note_label": false,
"approver_rule": 1,
"necessary_approver_rule": 0,
"merge_request_template": "%commit_msg%",
"mr_template": "%commit_msg%",
"path_reviewer_rules": "*.js review reviewer=username1,username2 necessary_reviewer=username3,username4\r\n*.java review reviewer=git_user1,git_user2 necessary_reviewer=git_user1,git_user2",
"path_reviewer": "",
"file_owner_path_rules": null,
"push_access_level": 0,
"auto_create_review_pre_push": false,
"review_check": false,
"resolved_check": false,
"merge_manager": "0",
"merge_request_must_link_tapd_tickets": false,
"allow_merge_commits": true,
"allow_squash_merging": true,
"allow_rebase_merging": true,
"default_merge_method": 0,
"rule_id": 679237,
"merge_access_level": 40
}
# 取消保护分支
取消受保护分支
注意: 保护分支功能已迁移至规则组,本接口在后续版本中可能会删除,建议尽快迁移,可参考旧的保护分支接口兼容
如果 branch 包含特殊字符,确保 branch 进行过 encodeURIComponent 编码,例子:feature/function1 --> feature%2Ffunction1。
PUT /api/v3/projects/:id/repository/branches/:branch/unprotect
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| branch | string | 分支名 |
返回值:
{
"name": "fenzhi1",
"protected": false,
"developers_can_push": false,
"developers_can_merge": false,
"commit": {
"id": "37c36524713aa8083f787066a9ed0c0d2f82bbb4",
"message": "dass",
"parent_ids": [
"b5e3f65af2fd6d2895414a679290cad7664217b3"
],
"authored_date": "2012-01-08T17:30:32+0000",
"author_name": "git_user2",
"author_email": "git_user2@tencent.com",
"committed_date": "2012-01-08T17:30:32+0000",
"committer_name": "git_user2",
"committer_email": "git_user2@tencent.com",
"title": "666",
"created_at": "2012-01-08T17:30:32+0000",
"short_id": "37c36524"
}
}
# 保护分支成员
分支成员访问权限包括:
REPORTER = 20
DEVELOPER = 30
MASTER = 40
访问权限不能被设置为低于 REPORTER 或者 高于 MASTER
# 为保护分支添加成员
注意: 保护分支功能已迁移至规则组,本接口在后续版本中可能会删除,建议尽快迁移,可参考旧的保护分支接口兼容
如果 protected_branch_name 包含特殊字符,确保 protected_branch_name 进行过 encodeURIComponent 编码,例子:feature/function1 --> feature%2Ffunction1。
POST /api/v3/projects/:id/branches/protected/:protected_branch_name/members
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer | 项目 ID 或 项目全路径 project_full_path |
| protected_branch_name | integer | 保护分支的 分支名 |
| user_id | integer | 用户的 ID |
| access_level | integer | 要给用户设置的访问级别 |
返回值:
{
"id": 1223,
"avatar_url": "git.tencent.com/uploads/user/avatar/1223",
"username": "user_git022",
"web_url": "https://git.tencent.com/u/user_git022",
"name": "user_git022",
"state": "active",
"access_level": 40
}
# 获取保护分支的成员
注意: 保护分支功能已迁移至规则组,本接口在后续版本中可能会删除,建议尽快迁移,可参考旧的保护分支接口兼容
GET /api/v3/projects/:id/branches/protected/:protected_branch_name/members
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer | 项目 ID 或 项目全路径 project_full_path |
| protected_branch_name | integer | 保护分支的 分支名 |
返回值:
[{
"id": 1223,
"avatar_url": "git.tencent.com/uploads/user/avatar/1223",
"username": "user_git022",
"web_url": "https://git.tencent.com/u/user_git022",
"name": "user_git022",
"state": "active",
"access_level": 40
}]
# 编辑保护分支的成员
注意: 保护分支功能已迁移至规则组,本接口在后续版本中可能会删除,建议尽快迁移,可参考旧的保护分支接口兼容
PUT /api/v3/projects/:id/branches/protected/:protected_branch_name/members/:user_id
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer | 项目 ID 或 项目全路径 project_full_path |
| protected_branch_name | integer | 保护分支的 分支名 |
| user_id | integer | 用户的 ID |
| access_level | integer | 要给用户设置的访问级别 |
返回值:
{
"id": 1223,
"avatar_url": "git.tencent.com/uploads/user/avatar/1223",
"username": "user_git022",
"web_url": "https://git.tencent.com/u/user_git022",
"name": "user_git022",
"state": "active",
"access_level": 30
}
# 删除保护分支的指定用户
注意: 保护分支功能已迁移至规则组,本接口在后续版本中可能会删除,建议尽快迁移,可参考旧的保护分支接口兼容
DELETE /api/v3/projects/:id/branches/protected/:protected_branch_name/members/:user_id
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer | 项目 ID 或 项目全路径 project_full_path |
| protected_branch_name | integer | 保护分支的 分支名 |
| user_id | integer | 用户的 ID |
返回值:
200 或其他返回值
# 设置分支命名和模型规则
有项目 master 以上权限的用户可设置分支模型类型,自动分类规则。
请将参数以 json 的格式放置在 request 请求体中
PUT /api/v3/projects/:id/repository/branch_settings
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| branch_name_regex | string(可选) | 允许的分支名称 regex 表达式 |
| branch_name_regex_type | integer(可选) | 允许的分支名称 regex 表达式适用的场景,默认值是 1,针对所有分支行为;可选值 2,针对创建新分支行为 |
| branch_types | array of hash(可选) | 分支模型目前支持的类别 |
branch_types 参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| name | string | 分支模型的类别 |
| regex | string(可选) | 允许的分支名称 regex 表达式 |
| enabled | Boolean | 选项开关 true/false |
Body 举例:
{
"branch_name_regex":"branch_name",
"branch_name_regex_type": 1,
"branch_types":[
{
"name":"Personal",
"enabled":true,
"regex":"test.*"
}
]
}
返回值:
{
"branch_name_regex": "branch_name",
"branch_name_regex_type": 1,
"branch_types": [
{
"description": "Others",
"name": "Others",
"color": "#7F8C8D",
"enabled": true,
"regex": null
},
{
"description": "The main branch",
"name": "Mainline",
"color": "#0033CC",
"enabled": true,
"regex": null
},
{
"description": "A branch for new feature development",
"name": "Feature",
"color": "#44AD8E",
"enabled": false,
"regex": "111"
},
{
"description": "A branch for personal development",
"name": "Personal",
"color": "#5CB85C",
"enabled": true,
"regex": "test.*"
},
{
"description": "A branch with stable version and ready for release",
"name": "Release",
"color": "#6B7FAB",
"enabled": false,
"regex": ""
},
{
"description": "A branch to capture work to fix an urgent production defect",
"name": "Hotfix",
"color": "#CC0033",
"enabled": false,
"regex": ""
},
{
"description": "The main development branch for the next release",
"name": "Develop",
"color": "#428BCA",
"enabled": true,
"regex": ""
},
{
"description": "A branch for product bugs fix",
"name": "Bugfix",
"color": "#A8D695",
"enabled": false,
"regex": ""
},
{
"description": "A branch for co-development in sub-team",
"name": "Collaboration",
"color": "#A295D6",
"enabled": false,
"regex": ""
},
{
"description": "A branch of pre-production environment",
"name": "Pre-production",
"color": "#664EC7",
"enabled": false,
"regex": ""
},
{
"description": "A branch of production environment",
"name": "Production",
"color": "#8E44AD",
"enabled": false,
"regex": ""
},
{
"description": "A branch of the specific environment where the product is deployed",
"name": "Environment",
"color": "#D9534E",
"enabled": false,
"regex": ""
},
{
"description": "A branch collects experimental work, and not expected to be merged into mainline",
"name": "Experimental",
"color": "#D1D100",
"enabled": false,
"regex": ""
}
]
}
# 获取分支设置详情
GET /api/v3/projects/:id/repository/branch_settings
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
返回值:
{
"branch_name_regex": "branch_name",
"branch_name_regex_type": 1,
"branch_types": [
{
"description": "Others",
"name": "Others",
"color": "#7F8C8D",
"enabled": true,
"regex": null
},
{
"description": "The main branch",
"name": "Mainline",
"color": "#0033CC",
"enabled": true,
"regex": null
},
{
"description": "A branch for new feature development",
"name": "Feature",
"color": "#44AD8E",
"enabled": true,
"regex": "feature.*"
},
{
"description": "A branch for personal development",
"name": "Personal",
"color": "#5CB85C",
"enabled": true,
"regex": ""
},
{
"description": "A branch with stable version and ready for release",
"name": "Release",
"color": "#6B7FAB",
"enabled": false,
"regex": ""
},
{
"description": "A branch to capture work to fix an urgent production defect",
"name": "Hotfix",
"color": "#CC0033",
"enabled": false,
"regex": ""
},
{
"description": "The main development branch for the next release",
"name": "Develop",
"color": "#428BCA",
"enabled": false,
"regex": ""
},
{
"description": "A branch for product bugs fix",
"name": "Bugfix",
"color": "#A8D695",
"enabled": false,
"regex": ""
},
{
"description": "A branch for co-development in sub-team",
"name": "Collaboration",
"color": "#A295D6",
"enabled": false,
"regex": ""
},
{
"description": "A branch of pre-production environment",
"name": "Pre-production",
"color": "#664EC7",
"enabled": false,
"regex": ""
},
{
"description": "A branch of production environment",
"name": "Production",
"color": "#8E44AD",
"enabled": false,
"regex": ""
},
{
"description": "A branch of the specific environment where the product is deployed",
"name": "Environment",
"color": "#D9534E",
"enabled": false,
"regex": ""
},
{
"description": "A branch collects experimental work, and not expected to be merged into mainline",
"name": "Experimental",
"color": "#D1D100",
"enabled": false,
"regex": ""
}
]
}
# 获取 2 个分支的 Base Commit 点
获取 2 个分支的 Base Commit 点 (merge-base)
GET /api/v3/projects/:id/repository/branches/merge_base
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| source_project_id | integer(可选) | 源项目 ID,默认为 id 的值 |
| target_project_id | integer(可选) | 目标项目 ID,默认为 id 的值 |
| source_branch | string | 源分支名 |
| target_branch | string(可选) | 目标分支名,默认为 source_branch 的值 |
| source_commit | string(可选) | 源 commit id,默认为 source_branch 的值 |
| target_commit | string(可选) | 目标 commit id,默认为 target_branch 的值 |
返回值:
"f6b6ddcb80cde5fa7d6d844094c19d2cbef2ad2a"
# 合并分支
将分支或者 commit 合并到指定分支
PUT /api/v3/projects/:id/repository/branches/merge
参数:
| 参数 | 类型 | 描述 |
|---|---|---|
| id | integer 或 string | 项目 ID 或 项目全路径 project_full_path |
| source_project_id | integer(可选) | 源项目 ID,默认为 id 的值 |
| source_object_id | string | 源分支名或者 commit |
| target_branch | string | 目标分支名 |
| merge_type | string(可选) | 合并方式,默认为普通合并 merge,可选 merge、rebase、squash |
| commit_message | string(可选) | 合并点提交信息 (merge_type=rebase 时必填) |
返回值:
"f6b6ddcb80cde5fa7d6d844094c19d2cbef2ad2a"