Bagaimana cara mengunduh tarball dari GitHub menggunakan cURL?

93

Saya mencoba mengunduh tarball dari GitHub menggunakan cURL , tetapi tampaknya tidak mengarahkan:

$ 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>

Catatan: wget bekerja untuk saya:

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

Namun saya ingin menggunakan cURL karena pada akhirnya saya ingin memisahkannya dengan sesuatu seperti:

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

Saya menemukan bahwa URL setelah pengalihan ternyata https://download.github.com/pinard-Pymacs-v0.24-beta1-0-gcebc80b.tar.gz , tapi saya ingin cURL cukup pintar untuk memahami ini keluar.

asin
sumber

Jawaban:

148

Gunakan -Lopsi untuk mengikuti pengalihan:

curl -L https://github.com/pinard/Pymacs/tarball/v0.24-beta2 | tar zx
asin
sumber
3
Sebab https, Anda mungkin juga membutuhkan -k.
nicerobot
1
Kenapa belakangan ini ada masalah sertifikat di raw.github.com? Saya mengalami masalah saat menginstal homebrew dan rvm di komputer baru. Saya biasa menyalin dan menempel dari beranda dan berhasil. Sekarang saya mendapatkan masalah sertifikat: ruby ​​-e "$ (curl -fsSL raw.github.com/mxcl/homebrew/go )" curl: (60) Masalah sertifikat SSL: tidak bisa mendapatkan sertifikat penerbit lokal Detail selengkapnya di sini: curl. haxx.se/docs/sslcerts.html curl melakukan verifikasi sertifikat SSL secara default, menggunakan "bundle" .. Jika Anda ingin mematikan verifikasi sertifikat curl, gunakan opsi -k (atau --insecure).
Chris Cinelli
Mmmm ... apakah ada kemungkinan untuk menyertakan sub-modul di tarball juga? Tampaknya, untuk sub-modul hanya direktori kosong yang dibuat di tarball.
aurora
Tidak yakin apakah ini adalah masalah sementara sekarang, tetapi github mengembalikan kesalahan server internal 500 untuk saat ini.
BT
15
Dan hanya untuk berpotensi menyelamatkan seseorang dari Google, -Lberarti mengikuti pengalihan.
Steve Kehlet
45

Cara modern untuk melakukan ini adalah:

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

Ganti user-or-org,, repodan sha1-or-refsesuai.

Jika Anda menginginkan file zip dan bukan tarball, tentukan .zipsebagai pengganti .tar.gzsufiks.

Anda juga dapat mengambil arsip dari repo pribadi, dengan menentukan -u token:x-oauth-basicopsi untuk menggulung. Ganti tokendengan token akses pribadi.

Pavel Repin
sumber
3
dari semua jawaban, inilah yang saya cari! Jika Anda memiliki token oauth, Anda dapat menggunakannya secara langsung; https://[email protected]/user-or-org/repo/archive/sha1-or-ref.tar.gz
svenevs
bagaimana cara kerjanya untuk mengunduh dari rilis alih-alih dari arsip?
waspinator
1
@ waspinator, saya menggunakan curl -OL https://github.com/user-or-org/repo/releases/download/version/<asset name>.tar.gzLihat contoh di sini
Wayne
Bisakah Anda menjelaskan bagaimana ini lebih baik daripada jawaban yang diterima?
Robin Métral
Mungkin karena .../tarball/...metode hanya menghasilkan tar.gz? GH kemudian menambahkan metode yang lebih fleksibel yang memungkinkan Anda mengekstrak arsip dalam format yang Anda inginkan berdasarkan sufiks .tar.gzatau .zip. Saya tidak ingat lagi mengapa saya menulis posting ini.
Pavel Repin
14

Anda juga dapat menggunakan wget untuk »melepaskannya sebaris«. Cukup tentukan stdout sebagai file output ( -O -):

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

Semua solusi lain memerlukan penetapan nomor rilis / versi yang jelas merusak otomatisasi.

Solusi ini - saat ini telah diuji dan diketahui berfungsi dengan Github API v3 - namun dapat digunakan secara terprogram untuk mengambil rilis TERBARU tanpa menentukan tag atau nomor rilis apa pun dan melepaskan biner ke nama arbitrer yang Anda tentukan di switch --one-top-level="pi-ap". Cukup tukar pengguna f1linux dan repo pi-ap di contoh di bawah ini dengan detail Anda sendiri dan paman Bob Anda:

curl -L https://api.github.com/repos/f1linux/pi-ap/tarball | tar xzvf - --one-top-level="pi-ap" --strip-components 1
F1Linux
sumber
Ini indah, tetapi benar-benar membutuhkan penjelasan. misal, versi API GitHub manakah ini dan di mana didokumentasikan?
l3l_aze
1
@ l3l_aze Baru saja mengedit jawaban yang menyertakan nomor versi API Githib saat ini, solusi saya telah diuji dan dapat digunakan. Terima kasih atas tanggapan Anda! - T
F1Linux
Wah. Saya tidak berpikir ini mungkin bisa menjadi lebih baik dari apa yang telah Anda bagikan. Terima kasih banyak!
l3l_aze
1

dengan arah tertentu

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

zhengquan
sumber
cara yang lebih baik cd your_dir && curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx; cd -
zhengquan