如何使用 cURL 从 GitHub 下载 tarball?

Posted

技术标签:

【中文标题】如何使用 cURL 从 GitHub 下载 tarball?【英文标题】:How do I download a tarball from GitHub using cURL? 【发布时间】:2011-08-10 10:04:25 【问题描述】:

我正在尝试使用 cURL 从 GitHub 下载 tarball,但它似乎没有重定向:

$ curl --insecure https://github.com/pinard/Pymacs/tarball/v0.24-beta2
<html><body>You are being <a href="https://nodeload.github.com/pinard/Pymacs/tarball/v0.24-beta2">redirected</a>.</body></html>

注意:wget 对我有用:

$ wget --no-check-certificate https://github.com/pinard/Pymacs/tarball/v0.24-beta2

但是我想使用 cURL,因为最终我想用类似的东西解压它:

$ curl --insecure https://github.com/pinard/Pymacs/tarball/v0.24-beta2 | tar zx

我发现重定向后的 URL 原来是 https://download.github.com/pinard-Pymacs-v0.24-beta1-0-gcebc80b.tar.gz,但我希望 cURL 足够聪明,能够弄清楚这一点。

【问题讨论】:

【参考方案1】:

使用-L 选项跟踪重定向:

curl -L https://github.com/pinard/Pymacs/tarball/v0.24-beta2 | tar zx

【讨论】:

对于https,您可能还需要-k 为什么最近raw.github.com上出现证书问题?我在新机器上安装自制软件和 rvm 时遇到问题。我曾经从主页复制和粘贴,并且正在工作。现在我得到证书问题: ruby​​ -e "$(curl -fsSL raw.github.com/mxcl/homebrew/go)" curl: (60) SSL 证书问题:无法获取本地颁发者证书更多详细信息:curl.haxx.se/docs/sslcerts.html curl 默认执行 SSL 证书验证,使用“捆绑”。如果您想关闭 curl 对证书的验证,请使用 -k(或 --insecure)选项。 Mmmm ... 是否有可能将子模块也包含在 tarball 中?似乎,对于子模块,在 tarball 中只创建了空目录。 不确定这是否是暂时的问题,但 github 目前正在为此返回 500 内部服务器错误。 为了有可能为某人保存一个谷歌,-L 意味着跟随重定向。【参考方案2】:

现代化的做法是:

curl -sL https://github.com/user-or-org/repo/archive/sha1-or-ref.tar.gz | tar xz

相应地替换user-or-orgreposha1-or-ref

如果您想要 zip 文件而不是 tarball,请指定 .zip 而不是 .tar.gz 后缀。

您还可以通过指定-u token:x-oauth-basic 选项来检索私人回购的存档。将token 替换为personal access token.

【讨论】:

在所有答案中,这正是我想要的!如果你有一个 oauth 令牌,你可以直接使用它; https://token@github.com/user-or-org/repo/archive/sha1-or-ref.tar.gz 从发行版而不是存档下载这将如何工作? @waspinator ,我用curl -OL https://github.com/user-or-org/repo/releases/download/version/&lt;asset name&gt;.tar.gz 见例子here 你能解释一下这比公认的答案更好吗? 可能是因为.../tarball/... 方法只产生tar.gz? GH 后来添加了一种更灵活的方法,允许您根据后缀.tar.gz.zip 以您想要的格式提取存档。我不记得我为什么写这篇文章了。【参考方案3】:

您也可以使用 wget 来»解压它内联«。只需将 stdout 指定为输出文件 (-O -):

wget --no-check-certificate https://github.com/pinard/Pymacs/tarball/v0.24-beta2 -O - | tar xz

【讨论】:

【参考方案4】:

所有其他解决方案都需要指定发布/版本号,这显然会破坏自动化。

此解决方案 - 目前已测试并已知可与 Github API v3 一起使用 - 但是可用于以编程方式获取 LATEST 版本而无需指定任何标签或版本号,并将二进制文件解压缩为您在开关--one-top-level="pi-ap" 中指定的任意名称。只需在下面的示例中换出用户 f1linux 和 repo pi-ap 并使用您自己的详细信息和 Bob 是您的叔叔:

curl -L https://api.github.com/repos/f1linux/pi-ap/tarball | tar xzvf - --one-top-level="pi-ap" --strip-components 1

【讨论】:

这很漂亮,但确实可以使用一些解释。例如这是哪个 GitHub API 版本,它记录在哪里? @l3l_aze 刚刚编辑了答案,其中包括我的解决方案经过测试和已知可以使用的当前 Githib API 版本号。感谢您的反馈!- T 哇。我不认为这可能会比你已经分享的更好。非常感谢!【参考方案5】:

带有特定目录:

cd your_dir && curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx

【讨论】:

更好的方法cd your_dir &amp;&amp; curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx; cd -

以上是关于如何使用 cURL 从 GitHub 下载 tarball?的主要内容,如果未能解决你的问题,请参考以下文章

curl快速下载GitHub Repo指定commit的tar.gz

curl快速下载GitHub Repo指定commit的tar.gz

curl快速下载GitHub Repo指定commit的tar.gz

curl快速下载GitHub Repo指定commit的tar.gz

curl快速下载GitHub Repo指定commit的tar.gz

如何使用命令行从私有 github 存储库下载单个原始文件?