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.