GitHub Api 下载 zip 或 tarball 链接
Posted
技术标签:
【中文标题】GitHub Api 下载 zip 或 tarball 链接【英文标题】:GitHub Api download zip or tarball link 【发布时间】: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,我很好奇我是否遗漏了什么。
有没有办法通过 API 调用获取 zip/tarball 链接?
如果没有,有没有一种方法可以在不使用 git 二进制文件或库的情况下构建该字符串?意思是,我可以使用各种 API 调用来提取需要的数据并组装到我需要的 URL 吗?
我知道第二个问题对于 *** 来说有点不合理,这对我来说是一个有趣的项目,所以如果你只是在正确的方向上推动我而不是扔下,我更喜欢第二个问题一个代码sn-p。或者只是告诉我是否可能。
【问题讨论】:
【参考方案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 不支持路径。以上是关于GitHub Api 下载 zip 或 tarball 链接的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PHP 和 CURL 使用 api 在 github 上上传 zip
没有“zip download”按钮可以在github上的.zip中下载源代码