GitHub API 下载 zip 或 tarball 链接

75

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

当我从Github下载zip文件时,文件名末尾的十六进制字符串代表什么?

但我正在查看GitHub APIv3,我想知道是否有遗漏的内容。

  1. 是否有一种通过API调用获取zip / tarball链接的方法?

  2. 如果没有,是否可以在不使用git二进制或库的情况下构建该字符串?也就是说,我能否使用各种API调用来提取所需的数据,并组装成所需的URL?

我知道第二个问题对stackoverflow来说有点不切实际,而且对我来说这是一个有趣的项目,所以对于第二个问题,如果您只是引导我正确的方向,而不是提供代码片段,我会更喜欢。或者告诉我是否可能。

2个回答

127
你可以通过使用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'中获取名为'master'的文件。 更新的V3 API网址是:
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命令,获取完整的存档文件。它将按照你提到的问题中描述的命名约定创建一个目录。
从GitHub获取存档文件不需要Git二进制文件,感谢他们的下载服务"Nodeload"

ligemer 在一次编辑中提出了以下示例:

2016-08-25 编辑 - 使用 Wget、变量和解压的 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.example master

上面的命令将下载并提取GitHub文件夹到与脚本相同的目录。


迪奥戈·昆特拉建议在评论中

以下示例允许下载、提取和裁剪顶级目录

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

谢谢。我目前是通过curl这种方式获取它。我只是好奇是否有一种通过API获取下载链接的方法。我知道这并不特别有用,更多的是出于我的好奇心。 - mkly
1
@Mike:我知道的没有需要使用API来从GitHub获取档案的方法。重点是为您提供直接链接的建议。 - VonC
好的,谢谢。我想我会标记答案并继续前进。非常感谢你们的建议。我很感激。 - mkly
4
如果存储库是私有的,有没有办法获取zipball呢? - jayarjo
以下示例允许下载、提取和剪切顶级目录 curl -L https://api.github.com/repos/octokit/octokit.rb/tarball | tar xz --strip=1 - Diogo Quintela
显示剩余9条评论

31

嘿,有没有办法只下载一个文件夹?比如你的例子中只有 R 文件夹。 - samayo
@samaYo:我不知道是否有通过API实现这一点的方法,但你可以尝试git archive --remote=... <tree-ish> <path>。如果这在GitHub上可行,我会很感兴趣知道的;-) - krlmlr
@samayo 另一种方法是解压你需要的文件夹。这里有一个例子,当我只想要下载 Github 存档中的 src 文件夹时使用:tar -xzf archive.tar.gz "$(tar -tzf archive.tar.gz | head -1 )src" --strip 1 - Tirsvad
更新的Github文档链接:https://docs.github.com/en/rest/reference/repos#download-a-repository-archive-zip - blacelle
@samayo 你能想出一种下载存储库中一个子文件夹的方法吗?tarball API不支持该路径。 - PraveenMak
@PraveenMak 我不确定我是否还记得清楚,因为这是很久以前的事了。但我想我的回答是否定的。我认为我没有找到解决方案。也许你可以在这个问题上提出一个问题。祝你好运。 - samayo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接