Como faço o download de um tarball do GitHub usando cURL?


93

Estou tentando baixar um tarball do GitHub usando cURL , mas não parece estar redirecionando:

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

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

No entanto, quero usar cURL porque, em última análise, quero descompactá-lo in-line com algo como:

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

Descobri que o URL após o redirecionamento acabou sendo https://download.github.com/pinard-Pymacs-v0.24-beta1-0-gcebc80b.tar.gz , mas gostaria que cURL fosse inteligente o suficiente para descobrir isso fora.

Respostas:


148

Use a -Lopção para seguir redirecionamentos:

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

3
Pois https, você provavelmente também precisará -k.
nicerobot

1
Por que ultimamente há problemas de certificados em raw.github.com? Tive problemas para instalar o homebrew e o rvm em uma nova máquina. Eu costumava copiar e colar da página inicial e estava trabalhando. Agora recebo o problema do certificado: ruby ​​-e "$ (curl -fsSL raw.github.com/mxcl/homebrew/go )" curl: (60) Problema com o certificado SSL: não foi possível obter o certificado do emissor local Mais detalhes aqui: curl. haxx.se/docs/sslcerts.html curl executa a verificação do certificado SSL por padrão, usando um "pacote". Se você quiser desligar a verificação do certificado pelo curl, use a opção -k (ou --insecure).
Chris Cinelli,

Mmmm ... existe a possibilidade de incluir os submódulos no tarball também? Parece que, para submódulos, apenas diretórios vazios são criados no tarball.
aurora,

Não tenho certeza se este é um problema temporário no momento, mas o github está retornando um erro de servidor interno 500 para isso no momento.
BT

15
E apenas para potencialmente salvar alguém no google, -Lsignifica seguir redirecionamentos.
Steve Kehlet

45

A maneira modernizada de fazer isso é:

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

Substitua user-or-org, repoe em sha1-or-refconformidade.

Se você quiser um arquivo zip em vez de um tarball, especifique em .zipvez do .tar.gzsufixo.

Você também pode recuperar o arquivo de um repositório privado, especificando a -u token:x-oauth-basicopção de curl. Substitua tokenpor um token de acesso pessoal.


3
de todas as respostas, era exatamente isso que eu procurava! Se você tiver um token oauth, poderá usá-lo diretamente; https://token@github.com/user-or-org/repo/archive/sha1-or-ref.tar.gz
svenevs

como isso funcionaria para baixar versões em vez de arquivos?
waspinator

1
@waspinator, eu uso curl -OL https://github.com/user-or-org/repo/releases/download/version/<asset name>.tar.gzVeja o exemplo aqui
Wayne

Você pode explicar como isso é melhor do que a resposta aceita?
Robin Métral

14

Você também pode usar o wget para »descompactá-lo inline«. Basta especificar stdout como o arquivo de saída ( -O -):

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

2

Todas as outras soluções requerem a especificação de um número de lançamento / versão que obviamente interrompe a automação.

Esta solução - atualmente testada e conhecida por funcionar com Github API v3 - no entanto, pode ser usada programaticamente para obter a versão LATEST sem especificar qualquer tag ou número de versão e descompactar o binário para um nome arbitrário especificado na opção --one-top-level="pi-ap". Basta trocar o usuário f1linux e repo pi-ap no exemplo abaixo com seus próprios detalhes e Bob é seu tio:

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

Isso é lindo, mas poderia realmente usar alguma explicação. Por exemplo, qual versão da API do GitHub é essa e onde está documentada?
l3l_aze

1
@ l3l_aze Acabei de editar a resposta, inclui o número da versão atual da API Githib em que minha solução foi testada e funciona. Obrigado pelo seu feedback! - T
F1Linux

Uau. Eu não acho que isso poderia ficar melhor do que o que você já compartilhou. Muito obrigado!
l3l_aze

1

com um dir específico

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


maneira mais melhor cd your_dir && curl -L https://download.calibre-ebook.com/3.19.0/calibre-3.19.0-x86_64.txz | tar zx; cd -
zhengquan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.