【问题标题】:GitHub Api download zip or tarball linkGitHub Api 下载 zip 或 tarball 链接
【发布时间】:2012-01-12 16:58:41
【问题描述】:

这里有一个关于如何创建 zip/tarball 字符串的好链接

When I download a zip from github, what is the hex string at the end of the file name represent?

但我正在查看 GitHub APIv3,我很好奇我是否遗漏了什么。

  1. 有没有办法通过 API 调用获取 zip/tarball 链接?

  2. 如果没有,有没有一种方法可以在不使用 git 二进制文件或库的情况下构建该字符串?意思是,我可以使用各种 API 调用来提取需要的数据并组装到我需要的 URL 吗?

我知道第二个问题对于 stackoverflow 来说有点不合理,这对我来说是一个有趣的项目,所以如果你只是在正确的方向上推动我而不是扔下,我更喜欢第二个问题一个代码sn-p。或者只是告诉我是否可能。

【问题讨论】:

    标签: git github github-api


    【解决方案1】:

    您可以通过wget 退出 GitHub 存储库以获取 tar 文件 (archive):

    wget --no-check-certificate https://github.com/User/repo/archive/master.tar.gz
    
    # better, if the certificate authorities are present:
    wget https://github.com/User/repo/archive/master.tar.gz
    

    将从用户 'User' 的 repo 'repo' 中获取一个名为 'master' 的文件。

    updated V3 API url 是:

    https://api.github.com/repos/User/repo/:archive_format/:ref
    #
    # two possibilities for fomat:
    https://api.github.com/repos/User/repo/tarball/master
    https://api.github.com/repos/User/repo/zipball/master
    
    # from github example:
    $curl -L https://api.github.com/repos/octokit/octokit.rb/tarball > octokit.tar.gz
    

    然后您可以tar xpvf master 获取完整存档。它将按照question you mentioned 中描述的命名约定创建一个目录。

    感谢他们的download service "Nodeload",从 GitHub 获取存档不需要 git 二进制文件。


    ligemer建议in an edit下面的例子:

    编辑 2016-08-25 - 带有 Wget、变量和 Untar 的 Shell 示例:

    #!/bin/bash -ex
    
    # arguments:
    # token = $1
    # organization = $2
    # repo name = $3
    # branch = $4
    
    wget --header="Authorization: token ${1}" --header="Accept:application/vnd.github.v3.raw" -O - https://api.github.com/repos/${2}/${3}/tarball/${4} | tar xz
    

    调用方式:

    $ scriptName.sh token my-organization site.com master
    

    上面的命令会将 Github 文件夹下载并解压到与脚本相同的目录中。


    Diogo Quintela 建议in the comments

    以下示例允许下载、解压和剪切顶级目录

    curl -L https://api.github.com/repos/octokit/octokit.rb/tarball | tar xz --strip=1 
    

    【讨论】:

    • 谢谢。我目前正在通过 curl 获得它。我只是好奇是否有办法通过 API 获取下载链接。我知道它并不像我自己的好奇心那样特别有用。
    • @Mike:我知道从 GitHub 获取存档不需要任何 API。重点是提出一个直接链接供您使用。
    • 酷。谢谢。我想我会标记答案并继续前进。谢谢两位的建议。我很感激。
    • 如果存储库是私有的怎么办?无论如何要在这种情况下获得拉链球?
    • @jayarjo 好问题。我不确定(除非你是那个 repo 的所有者)。
    【解决方案2】:

    语法描述in the docs:

    GET /repos/:owner/:repo/:archive_format/:ref
    

    以下示例 URL 将(通过 302 redirect)指向 hadley/devtools 存储库中 master 的 zip 存档:

    https://api.github.com/repos/hadley/devtools/zipball/master

    archive_format 的另一个选项是tarball。)

    我不知道这个 API 什么时候可用。

    【讨论】:

    • 嘿,有什么方法可以只下载一个文件夹吗?就像您的示例中的 R 文件夹一样。
    • @samaYo:我不知道通过 API 实现此目的的方法,但您可能想尝试git archive --remote=... <tree-ish> <path>。我很想知道这是否适用于 GitHub ;-)
    • @samayo 另一种方法是解压缩您需要的文件夹 这是我在下载 github 存档时使用的示例,我只希望 src 文件夹 tar -xzf archive.tar.gz "$(tar - tzf archive.tar.gz | head -1 )src" --strip 1
    • 更新的 Github 文档链接:docs.github.com/en/rest/reference/…
    • @samayo 你能想出一种方法来下载 repo 中的一个子文件夹吗? tarball API 不支持路径。
    猜你喜欢
    • 2014-06-14
    • 2011-08-10
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    相关资源
    最近更新 更多