Come faccio a scaricare un tarball da GitHub usando cURL?


93

Sto cercando di scaricare un tarball da GitHub usando cURL , ma non sembra reindirizzare:

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

Nota: wget funziona per me:

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

Tuttavia, voglio usare cURL perché alla fine voglio scompattarlo in linea con qualcosa come:

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

Ho scoperto che l'URL dopo il reindirizzamento si è rivelato essere https://download.github.com/pinard-Pymacs-v0.24-beta1-0-gcebc80b.tar.gz , ma vorrei che cURL fosse abbastanza intelligente da capire questo fuori.

Risposte:


148

Usa l' -Lopzione per seguire i reindirizzamenti:

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

3
Perché httpsprobabilmente avrai anche bisogno di -k.
nicerobot

1
Perché ultimamente ci sono problemi con i certificati su raw.github.com? Ho avuto problemi a installare homebrew e rvm su una nuova macchina. Ho usato per copiare e incollare dalla homepage e stavo lavorando. Ora ottengo il problema del certificato: ruby ​​-e "$ (curl -fsSL raw.github.com/mxcl/homebrew/go )" curl: (60) Problema del certificato SSL: impossibile ottenere il certificato dell'emittente locale Maggiori dettagli qui: curl. haxx.se/docs/sslcerts.html curl esegue la verifica del certificato SSL per impostazione predefinita, utilizzando un "bundle". Se desideri disattivare la verifica del certificato da parte di curl, utilizza l'opzione -k (o --insecure).
Chris Cinelli

Mmmm ... c'è la possibilità di includere anche i sottomoduli nel tarball? Sembra che per i sottomoduli nel tarball vengano create solo directory vuote.
aurora

Non sono sicuro se questo sia un problema temporaneo in questo momento, ma GitHub sta restituendo un errore interno del server 500 per questo al momento.
BT

15
E solo per salvare potenzialmente qualcuno su Google, -Lsignifica seguire i reindirizzamenti.
Steve Kehlet

45

Il modo modernizzato per farlo è:

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

Sostituisci user-or-org, repoe di sha1-or-refconseguenza.

Se vuoi un file zip invece di un tarball, specifica .zipinvece del .tar.gzsuffisso.

Puoi anche recuperare l'archivio di un repository privato, specificando l' -u token:x-oauth-basicopzione per curl. Sostituisci tokencon un token di accesso personale.


3
di tutte le risposte, questo era esattamente quello che stavo cercando! Se hai un token oauth puoi usarlo direttamente; https://token@github.com/user-or-org/repo/archive/sha1-or-ref.tar.gz
svenevs

come funzionerebbe per il download da versioni invece che da archivi?
waspinator

1
@waspinator, io uso curl -OL https://github.com/user-or-org/repo/releases/download/version/<asset name>.tar.gzVedi esempio qui
Wayne

Puoi spiegare come questo sia migliore della risposta accettata?
Robin Métral

14

Puoi anche usare wget per »untar inline«. Specifica semplicemente stdout come file di output ( -O -):

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

2

Tutte le altre soluzioni richiedono di specificare un numero di rilascio / versione che ovviamente rompe l'automazione.

Questa soluzione- attualmente testato e conosciuto per il lavoro con Github API v3 - tuttavia può essere utilizzato a livello di codice per afferrare la ULTIME rilascio senza specificare alcun numero di targa o rilascio e UN-TAR il binario in un nome arbitrario specificato in interruttore --one-top-level="pi-ap". Basta scambiare l'utente f1linux e repo pi-ap nell'esempio seguente con i tuoi dettagli e Bob è tuo zio:

curl -L https://api.github.com/repos/f1linux/pi-ap/tarball | tar xzvf - --one-top-level="pi-ap" --strip-components 1

Questo è bellissimo, ma potrebbe davvero usare qualche spiegazione. ad esempio, quale versione dell'API GitHub è questa e dove è documentata?
l3l_aze

1
@ l3l_aze Ho appena modificato la risposta che include l'attuale numero di versione dell'API Githib che la mia soluzione è testata e nota per funzionare. Grazie per il tuo feedback! - T
F1Linux

Whoa. Non pensavo che questo potesse andare meglio di quello che avevi già condiviso. Grazie mille!
l3l_aze

1

con una specifica dir

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


modo migliore cd your_dir && curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx; cd -
zhengquan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.