如何使用 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-org
、repo
和sha1-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/<asset name>.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 && 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