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を十分にスマートにして、これ。

回答:


148

-Lオプションを使用してリダイレクトを追跡します。

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

3
についてはhttps、おそらく必要になるでしょう-k
nicerobot

1
なぜ最近raw.github.comに証明書の問題があるのですか?新しいマシンにhomebrewと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)オプションを使用します。
Chris Cinelli、2013

うーん...サブモジュールをtarballにも含める可能性はありますか?サブモジュールの場合、空のディレクトリのみがtarballに作成されるようです。
オーロラ

これが現在一時的な問題であるかどうかはわかりませんが、現在githubがこれに対して500内部サーバーエラーを返しています。
BT

15
そして、単に誰かをグーグルに保存するために、-Lリダイレクトに従うことを意味します。
Steve Kehlet、2014年

45

これを行う最新の方法は次のとおりです。

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

置き換えuser-or-orgrepoおよびsha1-or-refそれに応じて。

tarballの代わりにzipファイルが必要な場合.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

アーカイブではなくリリースからダウンロードする場合、これはどのように機能しますか?
ワスピーター

1
@waspinator、ここでcurl -OL https://github.com/user-or-org/repo/releases/download/version/<asset name>.tar.gz例を参照
ウェイン

これが受け入れられた回答よりも優れていることを説明できますか?
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で動作することがわかっています。ただし、プログラムを使用してタグやリリース番号を指定せずに最新のリリースを取得し、バイナリをスイッチで指定した任意の名前にTAR解除できます--one-top-level="pi-ap"。ユーザーf1linuxをスワップアウトし、以下の例のpi-apを自分の詳細とボブの叔父に置き換えます。

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 -
zhengquan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.