协作者的 REST API 端点
使用 REST API 管理仓库的协作者。
列出仓库协作者
对于组织拥有的仓库,协作者列表包括外部协作者、作为直接协作者的组织成员、通过团队成员资格拥有访问权限的组织成员、通过默认组织权限拥有访问权限的组织成员以及组织所有者。组织成员对组织拥有的仓库具有写入、维护或管理员权限,可以使用此端点。
团队成员将包括子团队的成员。
经过身份验证的用户必须对仓库具有推送访问权限才能使用此端点。
OAuth 应用令牌和个人访问令牌(经典)需要 read:org
和 repo
范围才能使用此端点。
“列出仓库协作者”的细粒度访问令牌
此端点适用于以下细粒度令牌类型:
细粒度令牌必须具有以下权限集
- “元数据”仓库权限(读取)
“列出仓库协作者”的参数
名称、类型、说明 |
---|
accept 字符串建议设置为 |
名称、类型、说明 |
---|
owner 字符串 必填仓库的帐户所有者。名称不区分大小写。 |
repo 字符串 必填仓库的名称,不带 |
名称、类型、说明 |
---|
affiliation 字符串根据其关联过滤返回的协作者。 默认值: 可以是以下之一: |
permission 字符串按协作者在仓库上的权限过滤协作者。如果未指定,则将返回所有协作者。 可以是以下之一: |
per_page 整数每页的结果数(最大 100)。有关更多信息,请参阅“在 REST API 中使用分页”。 默认值: |
page 整数要获取的结果的页码。有关更多信息,请参阅“在 REST API 中使用分页”。 默认值: |
“列出仓库协作者”的 HTTP 响应状态代码
状态代码 | 说明 |
---|---|
200 | 确定 |
404 | 资源未找到 |
“列出仓库协作者”的代码示例
请求示例
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/collaborators
回应
状态:200
[ { "login": "octocat", "id": 1, "node_id": "MDQ6VXNlcjE=", "avatar_url": "https://github.com/images/error/octocat_happy.gif", "gravatar_id": "", "url": "https://api.github.com/users/octocat", "html_url": "https://github.com/octocat", "followers_url": "https://api.github.com/users/octocat/followers", "following_url": "https://api.github.com/users/octocat/following{/other_user}", "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", "organizations_url": "https://api.github.com/users/octocat/orgs", "repos_url": "https://api.github.com/users/octocat/repos", "events_url": "https://api.github.com/users/octocat/events{/privacy}", "received_events_url": "https://api.github.com/users/octocat/received_events", "type": "User", "site_admin": false, "permissions": { "pull": true, "triage": true, "push": true, "maintain": false, "admin": false }, "role_name": "write" } ]
检查用户是否为仓库协作者
对于组织拥有的仓库,协作者列表包括外部协作者、作为直接协作者的组织成员、通过团队成员资格拥有访问权限的组织成员、通过默认组织权限拥有访问权限的组织成员以及组织所有者。
团队成员将包括子团队的成员。
经过身份验证的用户必须对仓库具有推送访问权限才能使用此端点。
OAuth 应用令牌和个人访问令牌(经典)需要 read:org
和 repo
范围才能使用此端点。
“检查用户是否为仓库协作者”的细粒度访问令牌
此端点适用于以下细粒度令牌类型:
细粒度令牌必须具有以下权限集
- “元数据”仓库权限(读取)
“检查用户是否为仓库协作者”的参数
名称、类型、说明 |
---|
accept 字符串建议设置为 |
名称、类型、说明 |
---|
owner 字符串 必填仓库的帐户所有者。名称不区分大小写。 |
repo 字符串 必填仓库的名称,不带 |
username 字符串 必填GitHub 用户帐户的句柄。 |
“检查用户是否为仓库协作者”的 HTTP 响应状态代码
状态代码 | 说明 |
---|---|
204 | 如果用户是协作者,则响应 |
404 | 如果用户不是协作者,则找不到 |
“检查用户是否为仓库协作者”的代码示例
请求示例
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/collaborators/USERNAME
如果用户是协作者,则响应
状态:204
添加仓库协作者
此端点会触发 通知。使用此端点过快地创建内容可能会导致二级速率限制。有关更多信息,请参阅“API 的速率限制”和“使用 REST API 的最佳实践”。
企业管理员可能会限制添加外部协作者。有关更多信息,请参阅“在企业中执行仓库管理策略”。
有关权限级别的更多信息,请参阅“组织的仓库权限级别”。当组织基础角色存在时,对可以授予组织成员的权限存在限制。在这种情况下,授予的权限必须等于或高于组织基础权限。否则,请求将失败,并提示
Cannot assign {member} permission of {role name}
请注意,如果您选择不传递任何参数,则在调用此端点时,需要将Content-Length
设置为零。有关更多信息,请参阅“HTTP 方法”。
受邀者将收到一条通知,告知他们已被邀请加入仓库,他们必须接受或拒绝邀请。他们可以通过通知页面、收到的电子邮件或使用API来执行此操作。
更新现有合作者的权限级别
该端点也可用于更改现有合作者的权限,而无需先删除再重新添加合作者。要更改权限,请使用相同的端点并传递不同的permission
参数。响应将为204
,没有任何其他指示表明权限级别已更改。
速率限制
您每 24 小时最多可以向一个仓库发送 50 份邀请。请注意,如果您邀请组织成员加入组织仓库,则没有限制。
“添加仓库合作者”的细粒度访问令牌
此端点适用于以下细粒度令牌类型:
细粒度令牌必须具有以下权限集
- “管理”仓库权限(写入)
“添加仓库合作者”的参数
名称、类型、说明 |
---|
accept 字符串建议设置为 |
名称、类型、说明 |
---|
owner 字符串 必填仓库的帐户所有者。名称不区分大小写。 |
repo 字符串 必填仓库的名称,不带 |
username 字符串 必填GitHub 用户帐户的句柄。 |
名称、类型、说明 |
---|
permission 字符串要授予合作者的权限。**仅在组织拥有的仓库上有效。**我们接受设置以下权限: 默认值: |
“添加仓库合作者”的 HTTP 响应状态代码
状态代码 | 说明 |
---|---|
201 | 创建新邀请时的响应 |
204 | 当
|
403 | 禁止 |
422 | 验证失败或端点已被滥用。 |
“添加仓库合作者”的代码示例
请求示例
curl -L \ -X PUT \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/collaborators/USERNAME \ -d '{"permission":"triage"}'
创建新邀请时的响应
状态:201
{ "id": 1, "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", "repository": { "id": 1296269, "node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5", "name": "Hello-World", "full_name": "octocat/Hello-World", "owner": { "login": "octocat", "id": 1, "node_id": "MDQ6VXNlcjE=", "avatar_url": "https://github.com/images/error/octocat_happy.gif", "gravatar_id": "", "url": "https://api.github.com/users/octocat", "html_url": "https://github.com/octocat", "followers_url": "https://api.github.com/users/octocat/followers", "following_url": "https://api.github.com/users/octocat/following{/other_user}", "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", "organizations_url": "https://api.github.com/users/octocat/orgs", "repos_url": "https://api.github.com/users/octocat/repos", "events_url": "https://api.github.com/users/octocat/events{/privacy}", "received_events_url": "https://api.github.com/users/octocat/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/octocat/Hello-World", "description": "This your first repo!", "fork": false, "url": "https://api.github.com/repos/octocat/Hello-World", "archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}", "assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}", "blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}", "branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}", "collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}", "comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}", "commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}", "compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}", "contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}", "contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors", "deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments", "downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads", "events_url": "https://api.github.com/repos/octocat/Hello-World/events", "forks_url": "https://api.github.com/repos/octocat/Hello-World/forks", "git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}", "git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}", "git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}", "git_url": "git:github.com/octocat/Hello-World.git", "issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}", "issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}", "issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}", "keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}", "labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}", "languages_url": "https://api.github.com/repos/octocat/Hello-World/languages", "merges_url": "https://api.github.com/repos/octocat/Hello-World/merges", "milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}", "notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}", "pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}", "releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}", "ssh_url": "[email protected]:octocat/Hello-World.git", "stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers", "statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}", "subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers", "subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription", "tags_url": "https://api.github.com/repos/octocat/Hello-World/tags", "teams_url": "https://api.github.com/repos/octocat/Hello-World/teams", "trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}", "hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks" }, "invitee": { "login": "octocat", "id": 1, "node_id": "MDQ6VXNlcjE=", "avatar_url": "https://github.com/images/error/octocat_happy.gif", "gravatar_id": "", "url": "https://api.github.com/users/octocat", "html_url": "https://github.com/octocat", "followers_url": "https://api.github.com/users/octocat/followers", "following_url": "https://api.github.com/users/octocat/following{/other_user}", "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", "organizations_url": "https://api.github.com/users/octocat/orgs", "repos_url": "https://api.github.com/users/octocat/repos", "events_url": "https://api.github.com/users/octocat/events{/privacy}", "received_events_url": "https://api.github.com/users/octocat/received_events", "type": "User", "site_admin": false }, "inviter": { "login": "octocat", "id": 1, "node_id": "MDQ6VXNlcjE=", "avatar_url": "https://github.com/images/error/octocat_happy.gif", "gravatar_id": "", "url": "https://api.github.com/users/octocat", "html_url": "https://github.com/octocat", "followers_url": "https://api.github.com/users/octocat/followers", "following_url": "https://api.github.com/users/octocat/following{/other_user}", "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", "organizations_url": "https://api.github.com/users/octocat/orgs", "repos_url": "https://api.github.com/users/octocat/repos", "events_url": "https://api.github.com/users/octocat/events{/privacy}", "received_events_url": "https://api.github.com/users/octocat/received_events", "type": "User", "site_admin": false }, "permissions": "write", "created_at": "2016-06-13T14:52:50-05:00", "url": "https://api.github.com/user/repository_invitations/1296269", "html_url": "https://github.com/octocat/Hello-World/invitations" }
删除仓库合作者
从仓库中删除合作者。
要使用此端点,经过身份验证的用户必须是仓库管理员或将其自身作为目标进行删除。
此端点还
- 取消任何未完成的邀请
- 取消分配用户对任何问题的分配
- 如果用户不是组织成员并且不是任何其他组织仓库的合作者,则删除对组织项目的访问权限。
- 取消收藏仓库
- 更新对软件包的访问权限
将用户作为合作者删除对分支的影响
- 如果用户通过其对该仓库的成员资格访问了分支,则用户也将从该分支中删除。
- 如果用户有自己的仓库分支,则该分支将被删除。
- 如果用户仍然可以读取仓库,则将拒绝此用户来自分支的打开的拉取请求。
注意
用户仍然可以通过组织权限(如基础仓库权限)访问仓库。
尽管 API 会立即响应,但其他权限更新可能需要一些额外的时间才能在后台完成。
有关分支权限的更多信息,请参阅“关于分支的权限和可见性”。
“删除仓库合作者”的细粒度访问令牌
此端点适用于以下细粒度令牌类型:
细粒度令牌必须具有以下权限集
- “管理”仓库权限(写入)
“删除仓库合作者”的参数
名称、类型、说明 |
---|
accept 字符串建议设置为 |
名称、类型、说明 |
---|
owner 字符串 必填仓库的帐户所有者。名称不区分大小写。 |
repo 字符串 必填仓库的名称,不带 |
username 字符串 必填GitHub 用户帐户的句柄。 |
“删除仓库合作者”的 HTTP 响应状态代码
状态代码 | 说明 |
---|---|
204 | 当合作者从仓库中删除时,返回“无内容”。 |
403 | 禁止 |
422 | 验证失败或端点已被滥用。 |
“删除仓库合作者”的代码示例
请求示例
curl -L \ -X DELETE \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/collaborators/USERNAME
当合作者从仓库中删除时,返回“无内容”。
状态:204
获取用户的仓库权限
检查合作者的仓库权限。可能的仓库权限为admin
、write
、read
和none
。
注意:permission
属性提供admin
、write
、read
和none
的旧版基础角色,其中maintain
角色映射到write
,triage
角色映射到read
。要确定分配给合作者的角色,请参阅role_name
属性,该属性将提供完整角色名称,包括自定义角色。permissions
哈希也可用于确定合作者对仓库具有的基本访问级别。
“获取用户的仓库权限”的细粒度访问令牌
此端点适用于以下细粒度令牌类型:
细粒度令牌必须具有以下权限集
- “元数据”仓库权限(读取)
“获取用户的仓库权限”的参数
名称、类型、说明 |
---|
accept 字符串建议设置为 |
名称、类型、说明 |
---|
owner 字符串 必填仓库的帐户所有者。名称不区分大小写。 |
repo 字符串 必填仓库的名称,不带 |
username 字符串 必填GitHub 用户帐户的句柄。 |
“获取用户的仓库权限”的 HTTP 响应状态代码
状态代码 | 说明 |
---|---|
200 | 如果用户具有管理员权限 |
404 | 资源未找到 |
“获取用户的仓库权限”的代码示例
请求示例
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/collaborators/USERNAME/permission
如果用户具有管理员权限
状态:200
{ "权限": "管理员", "角色名称": "管理员", "用户": { "登录名": "octocat", "ID": 1, "节点 ID": "MDQ6VXNlcjE=", "头像 URL": "https://github.com/images/error/octocat_happy.gif", "Gravatar ID": "", "URL": "https://api.github.com/users/octocat", "HTML URL": "https://github.com/octocat", "关注者 URL": "https://api.github.com/users/octocat/followers", "关注 URL": "https://api.github.com/users/octocat/following{/other_user}", "Gist URL": "https://api.github.com/users/octocat/gists{/gist_id}", "收藏 URL": "https://api.github.com/users/octocat/starred{/owner}{/repo}", "订阅 URL": "https://api.github.com/users/octocat/subscriptions", "组织 URL": "https://api.github.com/users/octocat/orgs", "仓库 URL": "https://api.github.com/users/octocat/repos", "事件 URL": "https://api.github.com/users/octocat/events{/privacy}", "接收事件 URL": "https://api.github.com/users/octocat/received_events", "类型": "用户", "站点管理员": false } }