Comment télécharger une archive tar depuis GitHub en utilisant cURL?


93

J'essaie de télécharger une archive tar à partir de GitHub en utilisant cURL , mais cela ne semble pas rediriger:

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

Remarque: wget fonctionne pour moi:

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

Cependant, je veux utiliser cURL parce que finalement je veux le décompresser en ligne avec quelque chose comme:

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

J'ai trouvé que l'URL après la redirection s'est avérée être https://download.github.com/pinard-Pymacs-v0.24-beta1-0-gcebc80b.tar.gz , mais j'aimerais que cURL soit assez intelligent pour comprendre cette sortie.

Réponses:


148

Utilisez l' -Loption pour suivre les redirections:

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

3
Car https, vous aurez probablement également besoin de -k.
nicerobot

1
Pourquoi ces derniers temps, il y a des problèmes de certificats sur raw.github.com? J'ai eu des problèmes pour installer homebrew et rvm sur une nouvelle machine. J'avais l'habitude de copier et coller depuis la page d'accueil et je travaillais. Maintenant, j'obtiens le problème de certificat: ruby ​​-e "$ (curl -fsSL raw.github.com/mxcl/homebrew/go )" curl: (60) Problème de certificat SSL: impossible d'obtenir le certificat de l'émetteur local Plus de détails ici: curl. haxx.se/docs/sslcerts.html curl effectue la vérification du certificat SSL par défaut, en utilisant un "bundle". Si vous souhaitez désactiver la vérification du certificat par curl, utilisez l'option -k (ou --insecure).
Chris Cinelli

Mmmm ... est-il possible d'inclure également les sous-modules dans l'archive tar? Il semble que pour les sous-modules, seuls les répertoires vides sont créés dans l'archive tar.
aurora

Je ne sais pas s'il s'agit d'un problème temporaire pour le moment, mais github renvoie une erreur de serveur interne 500 pour cela pour le moment.
BT

15
Et juste pour potentiellement sauver quelqu'un d'un google, -Lsignifie suivre les redirections.
Steve Kehlet

45

La façon modernisée de procéder est:

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

Remplacez user-or-org, repoet en sha1-or-refconséquence.

Si vous voulez un fichier zip au lieu d'une archive tar, spécifiez à la .zipplace du .tar.gzsuffixe.

Vous pouvez également récupérer l'archive d'un dépôt privé, en spécifiant l' -u token:x-oauth-basicoption à curl. Remplacez tokenpar un jeton d'accès personnel.


3
de toutes les réponses, c'était exactement ce que je cherchais! Si vous avez un jeton oauth, vous pouvez l'utiliser directement; https://token@github.com/user-or-org/repo/archive/sha1-or-ref.tar.gz
svenevs

comment cela fonctionnerait-il pour le téléchargement à partir de versions plutôt que d'archives?
waspinator

1
@waspinator, j'utilise curl -OL https://github.com/user-or-org/repo/releases/download/version/<asset name>.tar.gzVoir l'exemple ici
Wayne

Pouvez-vous expliquer en quoi c'est mieux que la réponse acceptée?
Robin Métral

14

Vous pouvez également utiliser wget pour «le décompresser en ligne». Spécifiez simplement stdout comme fichier de sortie ( -O -):

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

2

Toutes les autres solutions nécessitent de spécifier un numéro de version / version qui rompt évidemment l'automatisation.

Ce Solution- actuellement testé et connu pour travailler avec Github API v3 - peut cependant être utilisé par un programme pour saisir le DERNIERES communiqué sans préciser toute étiquette ou numéro libération et non-RAT binaire à un nom arbitraire spécifié dans le commutateur --one-top-level="pi-ap". Remplacez simplement l' utilisateur f1linux et le repo pi-ap dans l'exemple ci - dessous avec vos propres détails et Bob est votre oncle:

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

C'est beau, mais pourrait vraiment utiliser une explication. Par exemple, de quelle version d'API GitHub s'agit-il et où est-elle documentée?
l3l_aze le

1
@ l3l_aze Je viens de modifier la réponse, elle inclut le numéro de version actuel de l'API Githib avec laquelle ma solution est testée et connue pour fonctionner. Merci pour vos commentaires! - T
F1Linux

Whoa. Je ne pensais pas que cela pourrait être mieux que ce que vous aviez déjà partagé. Merci beaucoup!
l3l_aze

1

avec un répertoire spécifique

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


plus meilleur moyen cd your_dir && curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx; cd -
zhengquan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.