如何使用命令行在组织内邀请用户加入私有github存储库

问题描述

我正在尝试将用户添加到组织内的私有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提供winterfellgot的访问权限,我将使用以下命令

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}

但是我认为您不能将两者结合(将协作者添加到组织存储库中)

这是因为该协作者必须先成为组织的成员(这样才能接收和接受邀请),然后再添加到存储库中。