繁体   English   中英

使用 GitHub V3 API (REST) 创建分叉

[英]Creating a fork with the GitHub V3 API (REST)

我正在尝试通过 REST 使用 GitHub V3 API 分叉一个 repo,但是,我在根据文档( https://developer.github.com/v3/repos/forks/#create-叉)。

基本上,到目前为止我所拥有的:

  • 具有 OAuth 令牌的登录用户
  • 对 API 的 POST 请求设置(URL: https://api.github.com/repos/carmichaelalonso/infiniteflight/forks/ ://api.github.com/repos/carmichaelalonso/infiniteflight/forks/) - 我正在用 hurl.it 测试这个。
  • 请求中的标头:一个名称为Authorization ,值为 'token ...',另一个指定Content-Type ,值为application/json
  • 具有以下 JSON 的主体: {"organization" : "shortlisthome"} (shortlisthome 是我试图将 repo 分叉到的帐户。

我不打算把它分叉给一个组织,而不是一个标准的用户帐户,这是我感到困惑的地方。 当我运行请求时,我没有收到任何身份验证错误或 404 错误(我以前有过,但我错误地输入了不正确的值,导致了此类错误)。

但是,当我运行此请求时,得到以下结果(422 无法处理的请求):

{
    "message": "Validation Failed",
    "documentation_url": "---url-to-docs---",
    "errors": [
        {
            "resource": "Fork",
            "code": "invalid",
            "field": "organization"
        }
    ]
}

我不确定我是否能够将其分叉给标准用户,或者我的请求是否存在错误。 请让我知道我是否可以提供更多信息(第一次在这里发帖,所以对惯例有点不熟悉)。 谢谢!

为了使shortlisthome分叉存储库,您需要对其进行身份验证。 您尝试分叉的存储库是 public ,因此您需要做的就是为 shortlisthome 获取 OAuth 令牌,然后向您现在发出的请求发出类似的请求。 唯一的区别是您不需要提供{"organization": "shortlisthome"}的 JSON 正文。

值得一提的是,当您是具有适当权限的组织成员并且想要将存储库分叉到该组织时,可以使用可选的 JSON 正文。 除非您通过身份验证,否则您不能将存储库分叉到其他人的帐户。

到目前为止,我一直避免使用 OAuth2,并且不知道投掷。 然而,也许这会有所帮助。
这篇文章展示了如何使用 cURL 的-u用户名标志来完成它:

curl -u 'myusername' https://api.github.com/repos/carmichaelalonso/infiniteflight/forks/ -d ''

-d (或--data )标志将其转换为 POST 请求。
如果没有该标志,cURL 默认为 GET 请求,这不是您想要的。

由于数据是此请求的 URI 的一部分,因此为必须遵循-d参数的数据发送一个空字符串,例如: -d ''

当然,使用 -u 还需要您提供密码。
以下是 GitHub 使用OAuth2 及其 API 显示的内容

  • OAuth2 令牌(在标头中发送):
    curl -H "Authorization: token OAUTH-TOKEN" https://api.github.com

  • OAuth2 令牌(作为参数发送):
    curl https://api.github.com/?access_token=OAUTH-TOKEN

  • 阅读有关 OAuth2 的更多信息 请注意,对于非网站的应用程序,可以通过编程方式获取 OAuth2 令牌。

  • OAuth2 密钥/秘密
    curl 'https://api.github.com/users/whatever?client_id=xxxx&client_secret=yyyy'

我怀疑添加-d '' (或一些等效的投掷),
加上上面用于发送 OAuth2 信息的格式之一,可能会让您大获全胜。

我用这个命令在 github 上 fork 企业curl -vX POST https://git.redacted.com/api/v3/repos/<org-to-fork-from>/<repo-to-fork>/forks?access_token=<api-token> -d @gh-fork.json --header "Content-Type: application/json"

gh-fork.json 只是

{ "organization": "org-to-fork-to", "description": "", "homepage": "https://git.redacted.com", "private": false }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM