【问题标题】:How do I download a tarball from GitHub using cURL?如何使用 cURL 从 GitHub 下载 tarball?
【发布时间】: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 足够聪明,能够弄清楚这一点。

【问题讨论】:

    标签: linux curl github wget


    【解决方案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 -
      猜你喜欢
      • 2014-06-14
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      相关资源
      最近更新 更多