问题描述
我正在尝试将用户添加到组织内的私有Github存储库 中。从这个post开始,我只是更改了API端点以应对组织(如here所述),最后得到了以下命令:
gh api orgs/MY_ORG/repos/MY_USER_NAME/MY_REPO/collaborators/COLLABORATOR_USER_NAME -f '{"permission":"maintain"}';
此命令系统地返回404错误(请注意,当我仅尝试检查用户是否可以访问存储库(即上述命令的GET
版本)时,也会收到404错误)。
我还需要提及的是,这似乎并不是一个简单的gh auth login
问题,因为像gh repo create MY_ORG/MY_REPO
这样的命令可以正常工作。
还有一些技术细节:
- os:macosx 10.15.16
- git:2.24.3
- gh:1.1.0
解决方法
我主动在这里回答我自己的问题,因为经过一些调查(感谢mislav的help)以及反复试验和错误之后,我发现了将协作者添加到组织内GitHub存储库中的正确方法使用CLI。我认为值得发布,希望对其他人有所帮助。
邀请外部协作者加入组织内的存储库
gh api -X PUT repos/:org/:repo/collaborators/:username -f permission=:perm
-X PUT
指定请求是PUT
而不是GET
(默认请求)。仓库的标识符由:org/:repo
指定(请注意,如果仓库不在组织内,则标识符为:owner/:repo
)。 :perm
参数指示访问类型,默认值为push
(请参见here)
因此,假设我想为组织admin
下的仓库jonsnow
提供winterfell
对got
的访问权限,我将使用以下命令
gh api -X PUT repos/got/winterfell/collaborators/jonsnow -f permission=admin
请注意,如果您直接发送回购邀请,则用户将以外部协作者(而非组织成员)的身份出现
将成员添加到组织中,并邀请他加入存储库
您只需要事先通过以下方式将用户包括为组织的成员
gh api -X PUT /orgs/:org/memberships/:username -f role=:role
,然后您可以使用与上述相同的命令(即
)为他提供访问特定存储库的权限。gh api -X PUT repos/:org/:repo/collaborators/:username -f permission=:perm
请注意,各种:role
的值都可以找到here
您可以set organization membership for a user
put /orgs/{org}/memberships/{username}
您可以add a collaborator to a repo
put /repos/{owner}/{repo}/collaborators/{username}
但是我认为您不能将两者结合(将协作者添加到组织存储库中)
这是因为该协作者必须先成为组织的成员(这样才能接收和接受邀请),然后再添加到存储库中。