¿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.

saltycrane
fuente

Respuestas:

148

Utilice la -Lopción para seguir las redirecciones:

curl -L https://github.com/pinard/Pymacs/tarball/v0.24-beta2 | tar zx
saltycrane
fuente
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.

Pavel Repin
fuente
3
de todas las respuestas, ¡esto era exactamente lo que estaba buscando! Si tiene un token de oauth, puede usarlo directamente; https://[email protected]/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
Knittl
fuente
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
F1Linux
fuente
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

zhengquan
fuente
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