¿Cómo descargo un tarball de GitHub usando cURL?


93

Estoy tratando de descargar un tarball de GitHub usando cURL , pero no parece estar redirigiendo:

$ 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 funciona para mí:

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

Sin embargo, quiero usar cURL porque, en última instancia, quiero descomprimirlo en línea con algo como:

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

Descubrí que la URL después de la redirección resultó ser https://download.github.com/pinard-Pymacs-v0.24-beta1-0-gcebc80b.tar.gz , pero me gustaría que cURL fuera lo suficientemente inteligente como para figurar esto afuera.

Respuestas:


148

Utilice la -Lopción para seguir las redirecciones:

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

3
Porque https, probablemente también lo necesite -k.
— nicerobot

1
¿Por qué últimamente hay problemas de certificados en raw.github.com? Tuve problemas para instalar homebrew y rvm en una máquina nueva. Solía ​​copiar y pegar desde la página de inicio y estaba trabajando. Ahora tengo el problema del certificado: ruby ​​-e "$ (curl -fsSL raw.github.com/mxcl/homebrew/go )" curl: (60) Problema con el certificado SSL: no se puede obtener el certificado del emisor local Más detalles aquí: curl. haxx.se/docs/sslcerts.html curl realiza la verificación del certificado SSL de forma predeterminada, utilizando un "paquete". Si desea desactivar la verificación de curl del certificado, utilice la opción -k (o --insecure).
— Chris Cinelli

Mmmm ... ¿existe la posibilidad de incluir los submódulos en el tarball también? Parece que para los submódulos solo se crean directorios vacíos en el tarball.
— Aurora

No estoy seguro de si esto es un problema temporal en este momento, pero github está devolviendo un error interno del servidor 500 para esto en este momento.
— BT

15
Y solo para potencialmente salvar a alguien en Google, -Lsignifica seguir las redirecciones.
— Steve Kehlet

45

La forma modernizada de hacer esto es:

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

Reemplazar user-or-org, repoy en sha1-or-refconsecuencia.

Si desea un archivo zip en lugar de un tarball, especifique en .ziplugar de .tar.gzsufijo.

También puede recuperar el archivo de un repositorio privado, especificando la -u token:x-oauth-basicopción de curl. Reemplácelo tokencon un token de acceso personal.


3
de todas las respuestas, ¡esto era exactamente lo que estaba buscando! Si tiene un token de oauth, puede usarlo directamente; https://token@github.com/user-or-org/repo/archive/sha1-or-ref.tar.gz
— svenevs

¿Cómo funcionaría esto para descargar desde versiones en lugar de archivos?
— waspinator

1
@waspinator, uso curl -OL https://github.com/user-or-org/repo/releases/download/version/<asset name>.tar.gzVer ejemplo aquí
— Wayne

¿Puede explicar cómo esto es mejor que la respuesta aceptada?
— Robin Métral

14

También puede utilizar wget para »descomprimirlo en línea«. Simplemente especifique stdout como archivo de salida ( -O -):

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

2

Todas las demás soluciones requieren especificar un número de lanzamiento / versión que obviamente rompe la automatización.

Esta solución, actualmente probada y conocida por su funcionamiento con Github API v3 , sin embargo, se puede usar de forma programática para obtener la ÚLTIMA versión sin especificar ninguna etiqueta o número de versión y des-TAR del binario a un nombre arbitrario que especifique en el conmutador --one-top-level="pi-ap". Simplemente cambie el usuario f1linux y repo pi-ap en el siguiente ejemplo con sus propios detalles y Bob es su tío:

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

Esto es hermoso, pero realmente necesita alguna explicación. por ejemplo, ¿qué versión de la API de GitHub es esta y dónde está documentada?
— l3l_aze

1
@ l3l_aze Acabo de editar la respuesta que incluye el número de versión actual de la API de Githib que mi solución está probada y se sabe que funciona. ¡Gracias por tus comentarios! - T
— F1Linux

¡Vaya! No pensé que esto podría ser mejor de lo que ya habías compartido. ¡Muchas gracias!
— l3l_aze

1

con un directorio específico

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


manera más mejor cd your_dir && curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx; cd -
— zhengquan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.