Jak pobrać archiwum tar z GitHub przy użyciu cURL?

93

Próbuję pobrać archiwum z GitHub przy użyciu cURL , ale nie wydaje się, aby przekierowywało:

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

Uwaga: wget działa dla mnie:

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

Jednak chcę użyć cURL, ponieważ ostatecznie chcę rozpakować go w linii za pomocą czegoś takiego:

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

Stwierdziłem, że URL po przekierowaniu okazał się https://download.github.com/pinard-Pymacs-v0.24-beta1-0-gcebc80b.tar.gz , ale chciałbym, żeby cURL był na tyle sprytny, żeby się domyślić to na zewnątrz.

słony żuraw
źródło

Odpowiedzi:

148

Użyj -Lopcji, aby śledzić przekierowania:

curl -L https://github.com/pinard/Pymacs/tarball/v0.24-beta2 | tar zx
słony żuraw
źródło
3
Dla https, będziesz także prawdopodobnie potrzeba -k.
nicerobot
1
Dlaczego ostatnio na raw.github.com pojawiają się problemy z certyfikatami? Miałem problemy z zainstalowaniem homebrew i rvm na nowej maszynie. Kiedyś kopiowałem i wklejałem ze strony głównej i działałem. Teraz pojawia się problem z certyfikatem: ruby ​​-e "$ (curl -fsSL raw.github.com/mxcl/homebrew/go )" curl: (60) Problem z certyfikatem SSL: nie można uzyskać certyfikatu lokalnego wydawcy Więcej szczegółów tutaj: curl. haxx.se/docs/sslcerts.html curl domyślnie przeprowadza weryfikację certyfikatu SSL przy użyciu „pakietu”. Jeśli chcesz wyłączyć weryfikację certyfikatu przez curl, użyj opcji -k (lub --insecure).
Chris Cinelli,
Mmmm ... czy istnieje możliwość dołączenia podmodułów również do paczki? Wygląda na to, że dla podmodułów w tarballu tworzone są tylko puste katalogi.
aurora
Nie jestem pewien, czy jest to teraz tymczasowy problem, ale github zwraca w tej chwili wewnętrzny błąd serwera 500.
BT
15
Potencjalne uratowanie kogoś w Google -Loznacza podążanie za przekierowaniami.
Steve Kehlet
45

Zmodernizowany sposób to:

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

Wymień user-or-org, repoi sha1-or-refodpowiednio.

Jeśli chcesz plik zip zamiast tarballa, określ .zipzamiast .tar.gzsufiksu.

Możesz także pobrać archiwum prywatnego repozytorium, określając -u token:x-oauth-basicopcję curl. Zamień tokenna osobisty token dostępu.

Pavel Repin
źródło
3
ze wszystkich odpowiedzi właśnie tego szukałem! Jeśli masz token Oauth, możesz go użyć bezpośrednio; https://[email protected]/user-or-org/repo/archive/sha1-or-ref.tar.gz
svenevs
jak by to działało w przypadku pobierania z wydań zamiast z archiwów?
waspinator
1
@waspinator, używam curl -OL https://github.com/user-or-org/repo/releases/download/version/<asset name>.tar.gzZobacz przykład tutaj
Wayne
Czy możesz wyjaśnić, dlaczego to jest lepsze niż zaakceptowana odpowiedź?
Robin Métral
Może dlatego, że .../tarball/...metoda produkuje tylko tar.gz? GH dodał później bardziej elastyczną metodę, która umożliwia wyodrębnianie archiwum w wybranym formacie na podstawie przyrostka .tar.gzlub .zip. Nie pamiętam już, dlaczego napisałem ten post.
Pavel Repin
14

Możesz także użyć wget, aby »rozpakować to w tekście«. Po prostu określ stdout jako plik wyjściowy ( -O -):

wget --no-check-certificate https://github.com/pinard/Pymacs/tarball/v0.24-beta2 -O - | tar xz
knittl
źródło
2

Wszystkie inne rozwiązania wymagają podania numeru wydania / wersji, co oczywiście przerywa automatyzację.

To rozwiązanie - obecnie przetestowane i znane z tego, że działa z Github API v3 - może być jednak używane programowo do pobrania NAJNOWSZEJ wersji bez podawania żadnego tagu lub numeru wydania i cofa TAR do dowolnej nazwy podanej w przełączniku --one-top-level="pi-ap". Po prostu zamień użytkownika f1linux i repozytorium pi-ap w poniższym przykładzie z własnymi danymi i wujem Boba:

curl -L https://api.github.com/repos/f1linux/pi-ap/tarball | tar xzvf - --one-top-level="pi-ap" --strip-components 1
F1Linux
źródło
To jest piękne, ale naprawdę przydałoby się jakieś wyjaśnienie. np. która wersja API GitHub to jest i gdzie jest udokumentowana?
l3l_aze
1
@ l3l_aze Właśnie zmodyfikowałem odpowiedź i zawiera ona aktualny numer wersji API Githib, z którym moje rozwiązanie jest testowane i działa. Dziękujemy za Twoją opinię! - T
F1Linux
Whoa. Nie sądziłem, że to może być lepsze niż to, co już udostępniłeś. Dziękuję Ci bardzo!
l3l_aze
1

z konkretnym reż

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

zhengquan
źródło
lepszy sposób cd your_dir && curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx; cd -
zhengquan