【问题标题】:Is there anyway to programmatically fetch a zipball of private github repo?无论如何以编程方式获取私人 github repo 的 zipball 吗?
【发布时间】:2012-03-19 06:34:02
【问题描述】:

我们有必要获取私人回购的 zipball。对于公开的,无论是通过 GitHub API 还是手动(https://github.com/user/repo/zipball/master)都非常容易。但是私人回购呢?即使有 oAuth 令牌,也不完全清楚如何做到这一点。

【问题讨论】:

  • 这个“Zipball”是什么,请给我更多的描述。

标签: git oauth github repository


【解决方案1】:

我似乎没有遇到从私人存储库获取 zipball 以供下载的问题。我使用您指定的相同格式,并且效果很好。

我使用 OAuth2 来获取存储库,但我使用您提供的格式构建了 zip 球的链接。 Here is the application我这样做了。

如果您希望获得 OAuth2 令牌,只需使用 GitHubt API v3 格式,这非常简单。虽然这不完全适合您的问题:

This 是我从 GitHub 获取 this chrome extension 的 OAuth2 令牌的方式

更新

@jayarjo I build the URL here on line 202。我只是像您指定的那样构建 URL,甚至没有使用 OAuth2 令牌。我的令牌允许我做的就是在创建标记之前获取所有用户的私人数据。但它没有问题......

我认为我实际上能够下载 zipball 的原因是因为 URL 实际上是 https://github.com/* 并且因为我目前由于 OAuth2 而登录,所以我有权访问该 URL - 听起来就像你不一样,所以你得到一个 404 错误。

您可以尝试向页面发送请求,如果您收到错误响应提示用户先登录,那么当您请求 zipball 时,您应该没有问题。

【讨论】:

  • 奇怪...我每次尝试都会收到“未找到”错误。此外,当使用我指定的相同格式时,我不确定将令牌放置在哪里?..你可以链接你执行此操作的特定代码行吗?
  • @jayarjo 更新了我的答案 - 基本上用户必须登录才能使用 URL。那么你不会得到 404
  • 但我获取了令牌(我的意思是我在尝试该网址的那一刻就拥有了它)。但这就是你所做的一切并且有效吗?也许我在这里忽略了一些简单的东西......
  • @jayarjo - 我认为你错过了我所说的。因为用户必须授权他们的应用程序,所以他们必须登录 GitHub。因此,他们可以访问该链接。如果用户未登录,我的链接也将不起作用。同样,用户必须登录 GitHub 才能使您的链接生效(登录 www.github.com - 而不是您的应用程序)。
  • 但是如果用户没有登录,你如何为用户获取令牌?我肯定在这里遗漏了一些东西......
【解决方案2】:

编辑:这不再有效。


带有卷曲:

curl -L -F "login=$USER" -F "token=$TOKEN" https://github.com/$USER/$REPO/$PKGTYPE/$BRANCHorTAG

其中$TOKEN 是您的 github 配置文件中的 API 令牌,而不是用于与 APIv3 通信的 oAuth2 令牌。

$USER 是令牌连接的用户帐户,不一定是回购所属的组织/其他用户。 $USER 的第二个实例是 repo 所在的用户/帐户。

$REPO 是私有仓库的名称

$PKGTYPE 是 tarball 或 zipball $BRANCHorTAG 是一个分支,例如 master,或者是提交的标签名称。

$USER 的第一个实例必须有权访问属于$USER 的第二个实例的存储库。

我在任何地方都找不到这个文档,所以如果你想要更详细的信息,我也会写一些关于它的文章。

【讨论】:

【解决方案3】:

您可以使用基本身份验证或基于令牌的方法。详情请见https://help.github.com/articles/downloading-files-from-the-command-line

【讨论】:

    【解决方案4】:

    新选择

    由于给定的已接受答案不再起作用,我想我会解释一下我是如何通过 github API 中的新更改来做到这一点的。

    新的下载 Api 链接

    首先,我在这里找到了有关下载存档的信息: https://developer.github.com/v3/repos/contents/#get-archive-link

    公开回购

    如果它是一个公共回购,那么这很容易......你可以这样做:

    curl -L https://api.github.com/repos/pengwynn/octokit/tarball > octokit.tar.gz
    

    私人回购

    如果它是一个私人仓库,您需要通过转到您的设置然后选择“开发者设置”/“Personal access tokens”来创建一个 oAuth 令牌。 我创建了一个个人令牌。

    然后使用下一页上的说明,我发现了如何获取您有权访问的私人回购: https://developer.github.com/v3/#authentication

    完整代码

    curl -H "Authorization: token ab499f3b..." \
    -L https://api.github.com/repos/godzilla/my_priv_repo/tarball > wut.tar.gz
    

    请务必将 ab499f3b... 替换为您的实际令牌。

    【讨论】:

    • 网址前的-L 是我所缺少的...谢谢!
    【解决方案5】:

    我遇到了同样的问题,这对我有用(截至 2015 年 2 月):

    curl -O -J -L -u $YOUROAUTHKEY:x-oauth-basic https://github.com/$USER/$REPO/archive/master.zip
    

    oAuth 作为标头解决方案对我不起作用,但有效的方法是将密钥填充到用户名中并指定类型。然后它给出了一个 302 以使用正确的链接重定向。

    详细命令确实帮助我解决了我正在使用的凭据是否被接受(404 与 401)

    【讨论】:

      【解决方案6】:

      cURL 允许 HTTP 标头和请求参数操作。例如:

      卷曲 -L
      -H "授权:令牌 $TOKEN"
      https://api.github.com/repos/octocat/Hello-World/zipball --output hello.tar.zip

      curl -L https://api.github.com/repos/octocat/Hello-World/zipball?access_token=$TOKEN --output hello.tar.zip

      【讨论】:

        【解决方案7】:

        除了api.github.com,你可以直接从github.com下载tarball/zipball:

        (令牌头-H "Authorization: token $(yourToken)" 公共回购可以省略)

        curl -H "Authorization: token $(yourToken)" -o code.tar.gz -L https://github.com/$(username)/$(reponame)/tarball/$(branchName/TagName/hashValue)

        curl -H "Authorization: token $(yourToken)" -o code.tar.gz -L https://github.com/$(username)/$(reponame)/archive/$(branchName/TagName/hashValue).tar.gz

        或用于拉链球

        curl -H "Authorization: token $(yourToken)" -o code.zip -L https://github.com/$(username)/$(reponame)/zipball/$(branchName/TagName/hashValue)

        curl -H "Authorization: token $(yourToken)" -o code.zip -L https://github.com/$(username)/$(reponame)/archive/$(branchName/TagName/hashValue).zip

        可以根据这个答案https://stackoverflow.com/a/23796159生成token

        【讨论】:

          猜你喜欢
          • 2013-03-02
          • 2021-03-03
          • 2012-11-30
          • 2017-05-16
          • 1970-01-01
          • 2014-06-09
          • 2020-07-27
          • 1970-01-01
          • 2016-05-28
          相关资源
          最近更新 更多