【问题标题】:How to invite a user to a private github repo within an organisation using the command line如何使用命令行邀请用户到组织内的私有 github 存储库
【发布时间】:2020-10-15 12:24:33
【问题描述】:

我正在尝试将用户添加到组织内的私有 Github 存储库。从这个post 开始,我只是更改了API 端点以应对组织(如here 所述),我最终得到以下命令:

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

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

这里还有一些技术细节:

  • 操作系统:macosx 10.15.16
  • git: 2.24.3
  • gh:1.1.0

【问题讨论】:

  • 我看到为 repo (docs.github.com/en/free-pro-team@latest/rest/reference/…) 添加协作者,而不是为组织 (docs.github.com/en/free-pro-team@latest/rest/reference/orgs) 添加协作者。你能用gh api repos/MY_USER_NAME/MY_REPO/coll...代替gh api orgs/MY_ORG/repos/MY_USER_NAME/MY_REPO/coll...吗?
  • 我尝试按照您的建议摆脱orgs/MY_ORG,但这不起作用。有趣的是,您建议的命令返回 404,正文包含 "documentation_url": "https://docs.github.com/rest/reference/repos#check-if-a-user-is-a-repository-collaborator"(表明 GitHub 能够以某种方式解析端点),而初始命令返回 "documentation_url": "https://docs.github.com/rest"。所以我现在想知道是否真的可以在组织内的 repo 上添加用户,也许 API 在这个阶段不支持这样的功能。

标签: github github-cli


【解决方案1】:

我主动在这里回答我自己的问题,因为经过一些调查(感谢 mislav 的help)和反复试验,我找到了将协作者添加到组织内的 GitHub 存储库的正确方法命令行界面。我认为值得发布它,希望这对其他人有帮助。

邀请外部合作者参与组织内的回购

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

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

所以假设我想提供admin 访问jonsnow 到组织got 下的repo got,我将使用以下命令

gh api -X PUT repos/got/winterfell/collaborators/jonsnow -f permission=admin

请注意,如果您直接发送回购邀请,用户将显示为外部协作者(而不是组织成员)

向组织添加成员并邀请他加入回购

您只需要预先将用户作为组织的成员加入

gh api -X PUT /orgs/:org/memberships/:username -f role=:role

然后您可以使用与上述相同的命令为他提供对特定 repo 的访问权限,即

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

注意各种:role的值可以在here找到

【讨论】:

  • 良好的反馈。赞成。所以我的答案中的结论是:你得到 404 因为你的原始 API 调用不存在。你需要先邀请一个合作者。使用 PUT。如我所说。 (但没有gh API -XPUT
  • 其实你不需要先邀请用户。如果您直接发送 repo 的邀请,用户将被标记为外部合作者。相反,如果您先将用户添加到组织,他将显示为组织成员。但是感谢您对此进行标记,我将编辑答案以使其更加明确。
  • 感谢您提供这些信息,这对我来说确实不是很清楚。
【解决方案2】:

你可以set organization membership for a user

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

你可以add a collaborator to a repo

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

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

这是因为协作者需要先成为组织的成员(因此接收并接受邀请),然后才能添加到存储库。

【讨论】:

  • 谢谢!你的回复让我走上了正确的轨道。为了使它工作,我们将实际使用 /repos/{org}/{repo}/collaborators/{username}{org} 不知何故成为相关存储库的所有者。尽管如此,我在尝试添加成员时仍然遇到错误我认为-f 参数的语法已更改,gh 抱怨我们将使用key=value 语法。我试过gh api /repos/{org}/{repo}/collaborators/{username} -f "permission=maintain",但失败了。关于如何解决这个问题的任何想法?
  • 不确定。我在外面,拿着手机。等我回来看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2021-07-11
  • 2016-02-19
  • 2019-12-27
  • 2020-10-24
  • 1970-01-01
  • 2016-02-12
相关资源
最近更新 更多