如何使用cURL从GitHub下载tarball?


93

我正在尝试使用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足够聪明以至于可以理解这个出来。

Answers:


148

使用该-L选项可遵循重定向:

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

3
为此https,您可能还需要-k
nicerobot 2011年

1
为什么最近在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)选项。
克里斯·辛纳利

嗯...是否有可能在tarball中也包含子模块?看来,对于子模块,在tarball中仅创建空目录。
2013年

不确定这是否是暂时的问题,但是github目前为此返回500内部服务器错误。
英国电信

15
只是为了可能为某人保存一个Google,就-L意味着要遵循重定向。
史蒂夫·凯莱特

45

现代化的方法是:

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

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

如果要压缩文件而不是压缩文件,请指定.zip而不是.tar.gz后缀。

您还可以通过指定-u token:x-oauth-basiccurl选项来检索私有仓库的档案。替换token个人访问令牌。


3
在所有答案中,这正是我想要的!如果您有oauth令牌,则可以直接使用它。https://token@github.com/user-or-org/repo/archive/sha1-or-ref.tar.gz
svenevs

从发行版而不是存档下载该如何工作?
waspinator

1
@waspinator,我使用此处的curl -OL https://github.com/user-or-org/repo/releases/download/version/<asset name>.tar.gz示例
Wayne

您能解释一下这比接受的答案好吗?
罗宾·梅特拉(RobinMétral)

14

您也可以使用wget来“内联”。只需将stdout指定为输出文件(-O -):

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

2

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

该解决方案经过了测试,并且已知可以与Github API v3一起使用,但是可以通过编程方式使用它来获取LATEST发行版,而无需指定任何标签或发行版号,并且将二进制文件解压缩为您在switch中指定的任意名称--one-top-level="pi-ap"。只需换出用户f1linux并在下面的示例中使用您自己的详细信息回购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

1
@ l3l_aze刚刚编辑了答案,其中包括我的解决方案经过测试且已知可以使用的当前Githib API版本号。感谢您的反馈!-T
F1Linux

哇 我认为这可能不会比您已经分享的更好。非常感谢你!
l3l_aze

1

具有特定目录

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 && curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx; cd -
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.