68

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

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

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

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

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

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

4

2 回答 2

115

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

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' 的文件。

更新后的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,您可以获得完整的存档。它将按照您提到的问题中描述的命名约定创建一个目录。

由于他们的下载服务“Nodeload”,从 GitHub 获取存档不需要 git 二进制文件。


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

编辑 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在评论中建议:

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

curl -L https://api.github.com/repos/octokit/octokit.rb/tarball | tar xz --strip=1 
于 2011-12-04T20:44:25.277 回答
28

语法在文档中描述:

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

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

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

(另一个选项archive_formattarball。)

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

于 2014-05-07T22:53:32.170 回答