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

How to invite a user to a private github repo within an organisation using the command line

我正在尝试将用户添加到组织内的私人Github 存储库。从此 post, I've simply changed the API endpoint to cope with organizations (as explained ) 开始,我得到以下命令:

gh api orgs/MY_ORG/repos/MY_USER_NAME/MY_REPO/collaborators/COLLABORATOR_USER_NAME -f '{"permission":"maintain"}';

此命令系统地 returns 一个 404 错误(请注意,当我尝试检查用户是否有权访问存储库时,我也会收到 404,即上面的 GET 版本命令)。 我还需要指出,这似乎不是一个微不足道的 gh auth login 问题,因为像 gh repo create MY_ORG/MY_REPO 这样的命令可以正常工作。

这里还有一些技术细节:

  • os: macosx 10.15.16
  • git: 2.24.3
  • gh: 1.1.0

你可以set organization membership for a user

put /orgs/{org}/memberships/{username}

你可以add a collaborator to a repo

put /repos/{owner}/{repo}/collaborators/{username}

但我认为您不能将两者结合起来(向组织存储库添加协作者)

这是因为协作者在被添加到存储库之前需要首先成为组织的成员(因此接收并接受邀请)。

我主动在这里回答我自己的问题,因为经过一些调查(感谢 mislav 的 help)和反复试验,我找到了将协作者添加到 [=51] 的正确方法=] 使用 CLI 在组织内进行回购。我认为值得发布,希望这对其他人有所帮助。

邀请外部协作者加入组织内的存储库

gh api -X PUT repos/:org/:repo/collaborators/:username -f permission=:perm

-X PUT 指定请求是 PUT 而不是 GET(默认请求)。回购的标识符由 :org/:repo 指定(请注意,如果回购不在组织下,则标识符将为 :owner/:repo)。 :perm参数表示访问类型,默认值为push(参见here

所以假设我想向组织 got 下的回购 winterfell 提供 adminjonsnow 的访问权限,我将使用以下命令

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