Baixe arquivos únicos do GitHub

625

Eu acho que a maioria de vocês, desenvolvedores, usa qualquer VCS , e espero que alguns de vocês usem o Git. Você tem alguma dica ou truque para obter um URL de download para um único arquivo em um repositório?

Não quero o URL para exibir o arquivo bruto; no caso de binários, é por nada.

http://support.github.com/discussions/feature-requests/41-download-single-file

É possível usar o GitHub como um "servidor de download"?

Se decidirmos mudar para o Google Code, a funcionalidade mencionada é apresentada aqui?

Ou existe alguma hospedagem gratuita e VCS para projetos de código aberto?

Radek Simko
fonte
3
O recurso Versões do GitHub entrou em cena para preencher essa função.
Pkamb
@RadekSimko DownGit pode ajudá-lo. Veja esta resposta.
Minhas Kamal #
1
Para o GitLab, consulte stackoverflow.com/a/51993087/6309 .
VonC 23/08/18
Isso não funcionará para todos, mas se você usar python pandas, poderá simplesmente fazer algo assim (também funciona para arquivos grandes): clique em "view raw" e, em seguida, copie o URL do navegador, faça o seguinte: df = pd.read_csv ( ' raw.githubusercontent.com/t-davidson/… ')
Graham Hesketh
Tente Gitzip para github para chrome
subtleseeker

Respostas:

580

O Git não suporta o download de partes do repositório. Você tem que baixar tudo. Mas você deve conseguir fazer isso com o GitHub.

Quando você visualiza um arquivo, ele possui um link para a versão "bruta". O URL é construído assim

https://raw.githubusercontent.com/user/repository/branch/filename

Ao preencher os espaços em branco na URL, você pode usar Wget ou cURL (com a -Lopção, veja abaixo) ou o que quer que seja para baixar um único arquivo. Novamente, você não obterá nenhum dos bons recursos de controle de versão usados ​​pelo Git fazendo isso.

Atualização: notei que você mencionou que isso não funciona para arquivos binários. Você provavelmente não deve usar arquivos binários no seu repositório Git, mas o GitHub possui uma seção de download para cada repositório que você pode usar para fazer upload de arquivos. Se você precisar de mais de um binário, poderá usar um arquivo .zip. O URL para baixar um arquivo carregado é:

https://github.com/downloads/user/repository/filename

Observe que os URLs fornecidos acima, a partir dos links github.com, serão redirecionados para raw.githubusercontent.com. Você não deve usar diretamente a URL fornecida por este redirecionamento HTTP 302, porque, de acordo com a RFC 2616 : "Como o redirecionamento pode ser alterado ocasionalmente, o cliente DEVE continuar a usar o Request-URI para solicitações futuras".

jonescb
fonte
16
Nota para a posteridade: acabei de testá-lo e usar boas obras brutas para arquivos binários.
emmby
1
tentou durante ~ 10 MB zip arquivo de erro tem: Erro: blob é muito grande
ina
32
O formato de URL sugerido não funciona para mim. Acho que https://raw.github.com/user/repository/branch/filename funciona.
Brian C.
5
@BrianC .: (pelo menos em 27 de agosto de 2013), o formato da URL mencionado na resposta ( rawapós o nome do repositório) agora é automaticamente redirecionado para o formato mencionado (nome do host raw.github.com). Em caso de dúvida, navegue até o arquivo em questão no github.com e clique no botão 'Raw'.
precisa saber é o seguinte
10
se você ainda deseja usar curl, siga o redirecionamento usando a opção -L na linha de comando: curl -L -O github.com/user/repository/raw/branch/filename
Lynx-Lab
560
  1. Vá para o arquivo que deseja baixar.
  2. Clique nele para visualizar o conteúdo na interface do usuário do GitHub.
  3. No canto superior direito, clique com o Rawbotão direito do mouse .
  4. Salvar como...
bearfriend
fonte
22
Em vez de "Salvar como", copie o URL. Esse é o URL do arquivo. Agora você pode baixá-lo com qualquer ferramenta que use o URL para download: wget, o seu browser, etc.
jgomo3
1
@MattParkins Eu apenas tentei isso e eu acho que funciona agora para arquivos grandes (mesmo arquivo binário com as "não podemos mostrar os arquivos que são este grande agora" aviso)
lmsurprenant
3
Pare de executar essas etapas detalhadas, use esta extensão do Chrome para fazer. chrome.google.com/webstore/detail/github-mate/…
Cam Song
3
Meu Deus, uma resposta concisa, direta, fácil de ler e entender, que não apenas faz sentido, mas funciona sem a necessidade de qualquer BS externa de terceiros! Se apenas todas as respostas do StackOverflow fossem tão diretas. Obrigado.
Padawan
2
Isso funcionou para um único arquivo C #. Talvez o github deva adicionar outro botão para fazer o download. Clicar com o botão direito do mouse não é muito intuitivo.
Nick
39

Você pode usar a API da V3 para obter um arquivo bruto como este (você precisará de um token OAuth):

curl -H 'Authorization: token INSERTACCESSTOKENHERE' -H 'Accept: application/vnd.github.v3.raw' -O -L https://api.github.com/repos/owner/repo/contents/path

Tudo isso tem que seguir uma linha. A -Oopção salva o arquivo no diretório atual. Você pode usar -o filenamepara especificar um nome de arquivo diferente.

Para obter o token OAuth, siga as instruções aqui: https://help.github.com/articles/creating-an-access-token-for-command-line-use

Eu escrevi isso como uma essência também: https://gist.github.com/madrobby/9476733

thomasfuchs
fonte
4
Este é bom, mas infelizmente suporta apenas arquivos com até 1 MiB de tamanho.
Per Lundberg
1
Se estiver executando isso em um programa, verifique se o User-Agent está definido.
Zugwalt
1
Você pode dar alguns exemplos do caminho. Se você repo for my-repo e o arquivo que você deseja obter estiver em x / y / z.txt, o URL seria ... Era difícil descobrir que / owner / repo / deveria ser preenchido por mim. Obrigado.
Gray
Isso funciona bem, mas há uma desvantagem. Você nem sempre tem a versão mais recente de um arquivo. Tente fazer uma modificação em um arquivo, não espere demais e tente recuperá-lo usando esse método. Você receberá apenas a versão anterior.
Pacomix 11/04
34

De acordo com esta essência , você pode usar wget ou cURL:

  1. Clique no nome do arquivo em um repositório GitHub.
  2. Clique em Raw para exibir o conteúdo do arquivo.
  3. Copie o URL no seu navegador.
  4. Na linha de comandos, execute:

    • wget --no-check-certificate --content-disposition https://URL-from-step3/
    • curl -LJO https://URL-from-step3/

    Mais um: no RHEL7.6, execute o seguinte:

    • wget https://URL-from-step3/ --output-document=FILE_NAME
Ted Cox
fonte
Eu usei wgetseguido pelo caminho bruto para o arquivo de origem C que eu queria depois de visualizar o arquivo no repositório do github e clicar no botão Raw. Trabalhou como um campeão com Raspbian no meu Raspberry Pi 3. #
Richard Chambers
Estou um pouco atrasado para o jogo, mas isso funcionou perfeitamente para mim. Visualizar o conteúdo bruto e clicar com o botão direito do mouse para fazer o download não funcionou no meu caso, porque eu precisava do arquivo em um formato específico, que não era oferecido pelo meu computador. Os comandos nesta resposta baixam tudo como está.
Seankala 23/07/19
16

O GitHub Mate facilita o download de um arquivo, basta clicar no ícone para fazer o download, atualmente ele só funciona no Chrome.

Download do GitHub Mate

Cam Song
fonte
1
@ jcollum Verificado agora, funciona para mim. Você pode ter certeza de que está usando a versão mais recente? ou deixe-me saber o erro. Fico feliz em ajudá-lo a fazê-lo funcionar.
Cam Song
2
Estou na versão mais recente do Chrome, 34.0.1847.116, e isso certamente não funciona. Qual sistema operacional você está usando? Estou no OS X Mavericks.
Jahkobi Digital
Testei no Chrome 34 no Windows 7 e no OS X Mavericks, ambos funcionam. muito estranho se não funcionar né? Por favor, esteja ciente de que a pasta não pode ser baixada. Talvez você possa experimentar uma máquina diferente.
Cam Canção
ok, esse método só funcionará se você tiver a extensão chrome. chrome.google.com/webstore/detail/github-mate/…
humazed em
Nesta visão, simplesmente clique com o botão direito do mouse e salve como arquivo
Thierry Dalon 30/09/19
16

Você pode usar curldesta maneira:

curl -OL https://raw.githubusercontent.com/<username>/<repo-name>/<branch-name>/path/to/file

Osignifica que a onda baixa o conteúdo
Lsignifica que a onda segue o redirecionamento

Marca
fonte
15

Agora isso é possível no GitHub para qualquer arquivo. Você precisa traduzir seus arquivos para raw.github.com. Por exemplo, se o seu arquivo estiver no seu repositório em:

https://github.com/<username>/<repo>/some_directory/file.rb

Usando o wget, você pode pegar o arquivo bruto em:

https://raw.github.com/<username>/<repo>/<branch>/some_directory/file.rb

O Rails Composer é um ótimo exemplo disso.

Joe Leo
fonte
2
Alguns arquivos estão hospedados no raw.githubusercontent.com
jcollum
1
e algumas vezes é raw2.github.com apenas fyi
jeremy.bass
11

Existe uma extensão do Chrome chamada Enhanced Github

Ele adicionará um botão de download diretamente à direita de cada arquivo.

insira a descrição da imagem aqui

Abraham Murciano Benzadon
fonte
Isso é melhor que o Github Mate apenas porque não pede permissão "Leia todo o seu histórico de navegação"! Lembre-se de clicar com o botão direito do mouse no botão de download> Salvar link como.
Gh0sT
É necessário adicionar token da sua conta do GitHub.
BartusZak 17/07/19
isso é seguro de usar?
Arian saputra
1
@Ariansaputra Estou usando há muito tempo, nunca me deparei com nenhum problema. Deve ser seguro. Não vejo por que não seria
Abraham Murciano Benzadon
@AbrahamMurcianoBenzadon thanks
Arian saputra
10

Para acompanhar o que thomasfuchs disse, mas para os usuários do GitHub Enterprise, aqui está o que você pode usar.

curl -H 'Authorization: token INSERTACCESSTOKENHERE' -H 'Accept: application/vnd.github.v3.raw' -O -L https://your_domain/api/v3/repos/owner/repo/contents/path

Também aqui está a documentação da API https://developer.github.com/v3/repos/contents

Drew Michel
fonte
1
Você pode dar alguns exemplos do caminho. Se você repo é a minha-repo e o arquivo que você deseja obter é em x / y / z.txt em seguida, o URL seria ... Graças
Grey
1
@Grayhttps://your_domain/api/v3/repos/{owner}/my-repo/contents/x/y/z.txt
Gregory Suvalian
se eu quiser baixar um arquivo de uma filial? como eu posso fazer isso?
Carlos Andres
@CarlosAndres usa o parâmetro ref developer.github.com/v3/repos/contents/#parameters-1
Drew Michel,
9

Caso você queira baixar um arquivo zip githubusandowget

wget -O filename.zip https://github.com/downloads/user/repository/filename.zip?raw=true

consulte este site para mais detalhes

DJJ
fonte
Você pode baixar qualquer arquivo, não apenas .zip.
enriquetaso
6

Esse método funciona no Windows, pois eu nunca usei o MAC, então não sei quais são as chaves alternativas no MAC para as chaves que vou mencionar abaixo.

Vamos falar sobre os arquivos CSV. Se você deseja baixar o arquivo CSV:

  1. Vá para o conjunto de dados específico que deseja baixar e clique nele.
  2. Você verá o botão "Bruto" no lado superior direito do conjunto de dados.
  3. Pressione "Alt" e clique com o botão esquerdo do mouse no botão "Raw".
  4. Todo o CSV será baixado no seu sistema.

Lembre-se, você deve pressionar Alt e clicar com o botão esquerdo simultaneamente. Basta clicar no botão "Raw" para abrir o CSV no navegador.

Espero que ajude.

saadi123
fonte
5

Você deve fazê-lo apenas com o rawURL do seu arquivo.

Por exemplo, para baixar o README do AFNetworking:

curl https://raw.githubusercontent.com/AFNetworking/AFNetworking/master/README.md > ADREADME.md 

Como é um repositório público, você não precisa de credenciais. Observe o tipo de URL:raw.githubusercontent.com/path/to/file

Kevin Delord
fonte
4

2019 Resumo

Existem várias maneiras de lidar com isso, dependendo do tamanho do arquivo, se você precisa ou não fazer download de pastas além dos arquivos e se planeja fazer isso manual ou programaticamente.

Existem seis opções resumidas abaixo. E para aqueles que preferem uma explicação mais prática, montei um vídeo do YouTube: Baixe arquivos e pastas individuais do GitHub .

Além disso, eu publiquei uma resposta semelhante no StackOverflow para aqueles que precisam baixar pastas / diretórios únicos do GitHub (em vez de arquivos).


1. Interface de usuário do GitHub

  • Há um botão de download na maioria das imagens.
  • Há um botão de download na página inicial do repositório. Obviamente, isso faz o download de todo o repositório, após o qual você precisa descompactar o download e arrastar manualmente os arquivos específicos necessários.

2. Menu de contexto do navegador

  • Vá para o arquivo no GitHub, clique com o botão direito do mouse no botão "Raw" para abrir o menu de contexto do navegador. A partir daí, se você estiver usando o Google Chrome, selecione "Salvar link como ...". O outro navegador terá uma interface de usuário semelhante, mas a descrição da seleção pode variar. Por exemplo, ele será listado como "Baixar arquivo vinculado" e "Baixar arquivo vinculado como" no Safari.

3. Ferramentas de Terceiros

  • Há uma variedade de extensões de navegador e aplicativos da web que podem lidar com isso, sendo o DownGit um deles. Basta colar o URL do GitHub no arquivo e pressionar o botão "Download". Observe que o link deve ser a exibição do repositório hospedado no GitHub.com, em oposição ao link direto do arquivo. Arquivo de exemplo link: https://github.com/babel/babel-eslint/blob/master/lib/parse.js.

4. Subversão

  • O GitHub não suporta git-archive (o recurso git que nos permitiria baixar arquivos específicos). O GitHub, no entanto, suporta uma variedade de recursos do Subversion, um dos quais podemos usar para esse fim. O Subversion é um sistema de controle de versão (uma alternativa ao git). Você precisará do Subversion instalado. Pegue a URL do GitHub para o arquivo que você deseja baixar. Você precisará modificar esse URL. Você deseja o link para o repositório, seguido pela palavra "tronco" e terminando com o caminho para o arquivo aninhado. Em outras palavras, usando o mesmo link de arquivo que mencionei acima, substituiríamos "blob / master" por "trunk". Por fim, abra um terminal, navegue até o diretório em que deseja baixar o conteúdo e digite o seguinte comando (substituindo o URL pelo URL que você construiu):svn export https://github.com/babel/babel-eslint/trunk/lib/parse.js

5. cURL

  • Você precisará do cURL instalado. Vá para o arquivo no GitHub.com, clique com o botão esquerdo no botão "Raw" para acessar o link direto do arquivo, copie este URL, abra um terminal, navegue até o diretório em que deseja que o conteúdo seja baixado, digite o seguinte comando, substituindo o nome do arquivo com o que quiser chamá-la, e substituindo a URL com o que você acabou de copiar: curl -o parse.js https://raw.githubusercontent.com/babel/babel-eslint/master/lib/parse.js.

6. API do GitHub

  • Na verdade, é isso que o DownGit está usando sob o capô. Usando a API REST do GitHub , faça uma solicitação GET para o terminal de conteúdo. O ponto final pode ser construído como se segue: https://api.github.com/repos/:owner/:repo/contents/:path. Depois de substituir os espaços reservados, um exemplo do ponto final é: https://api.github.com/repos/babel/babel-eslint/contents/lib/parse.js. Isso fornece dados JSON para esse arquivo, incluindo um URL de download (o mesmo URL de download que usamos no exemplo cURL acima). Porém, esse método não é tão útil para um único arquivo (é mais provável que você o use para baixar uma pasta específica, conforme detalhado na resposta que eu vinculei acima).
jabacchetta
fonte
é meu entendimento que os botões de download não baixam todo o repositório ... eu posso estar errado. aqui está um exemplo: github.com/googleapis/google-api-php-client se você baixar o repositório, não receberá o diretório de exemplos; você tem que mudar de ramo para fazer isso.
albert
1
@ albert Boa captura. Na verdade, eles excluíram pastas / arquivos específicos no arquivo .gitattributes
jabacchetta em
legal, obrigado por compartilhar isso! TIL ...
albert
4

Lançamentos do GitHub

Em vez de criar um link para baixar um arquivo específico no repositório, você deve usar o recurso Versões do GitHub para associar dados para download (como binários compilados) à versão marcada do código-fonte usado para gerar esses dados.

https://github.com/blog/1547-release-your-software

Temos o prazer de anunciar o Release, um fluxo de trabalho para o envio de software aos usuários finais. As liberações são objetos de primeira classe com changelogs e ativos binários que apresentam um histórico completo do projeto além dos artefatos do Git.

As versões são acompanhadas de notas e links para baixar o software ou o código-fonte.

Seguindo as convenções de muitos projetos Git, os lançamentos estão vinculados às tags Git. Você pode usar uma tag existente ou permitir que os lançamentos criem a tag quando ela for publicada.

insira a descrição da imagem aqui

pkamb
fonte
1
Sim! Esta é a solução mais simples, executável diretamente no seu navegador! 1. Na página principal do repositório, selecione releases2. Clique no número de confirmação. 3. Encontre o arquivo que deseja, clique nos três pontos ...e selecione View file4. Clique em View rawpara baixar o arquivo !!!
Jonathan Benn
3

Isso definitivamente funcionaria. Pelo menos no Chrome. Clique com o botão direito do mouse no ícone "Raw" -> Salvar link como .

Ankish Jain
fonte
1
Isso salva o arquivo HTML da página do github, que inclui o wrapper do github ao redor do arquivo.
Gregor Thomas
@ Gregor - FYI, não deveria, pelo menos para as páginas que são TEXTO. Em caso de dúvida, clique com o botão esquerdo no ícone "Raw". Isso deve abrir o arquivo de texto no navegador, SEM HTML. Agora, clique com o botão direito do mouse em qualquer lugar da página e faça "Salvar como ...". (Ou Select-All / Copiar e colar onde quiser)
ToolmakerSteve
3

Para baixar um arquivo de um repositório do Github, use o comando 'curl' com o link para o arquivo bruto.

curl https://raw.githubusercontent.com/user/repo/filename --output filename

Adicione a opção --output seguida pelo novo nome do arquivo para baixar o arquivo bruto para o arquivo recém-criado.

George
fonte
2
  1. A página à qual você vinculou responde à primeira pergunta.

  2. O GitHub também possui um mecanismo de download para coisas como lançamentos.

  3. O Google Code não possui o Git .

  4. GitHub, Google Code e SourceForge , apenas para começar, são hospedagem gratuita. O SourceForge ainda pode fazer o CVS .

bmargulies
fonte
2

Recentemente, encontrei um serviço chamado gitzipe também é de código aberto:

site - http://kinolien.github.io/gitzip/

repo - https://github.com/KinoLien/gitzip

Visite o site acima, insira o URL do repositório ou diretório, você pode baixar arquivos individuais ou o diretório inteiro como um arquivo zip.

avi
fonte
Mas como faço o download apenas jszip.min.jsdesse repositório? cara de troll
Levi Fuller
abra o arquivo no github e depois vá para raw. Você verá o código fonte do arquivo e poderá baixá-lo usando o navegador com o botão direito do mouse e salvar como. Funciona para mim.
Boris
2

Agora é possível baixar qualquer arquivo ou pasta específica dentro do repositório usando esta extensão do google chrome:

GitZip para github: link: https://chrome.google.com/webstore/detail/gitzip-for-github/ffabmkklhbepgcgfonabamgnfafbdbd

Uso:

  1. Em qualquer página de repositórios públicos do GitHub.
  2. Basta clicar duas vezes nos itens que você precisa.
  3. Clique no botão de download no canto inferior direito.
  4. Veja o painel de progresso e aguarde o download do acionador do navegador.
  5. Obtenha o arquivo ZIP.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Natesh bhat
fonte
1

Se você usar curl e firefox ... poderá usar o complemento cliget , que gera uma chamada de curl incluindo todos os mecanismos de autenticação (também conhecidos como cookies).

Então clique com o rawbotão direito do mouse no botão cliget -> "copy url for link" e cole-o em um shell. Você receberá seu arquivo mesmo que tenha que fazer login para vê-lo.

estani
fonte
0
  1. No lado direito, logo abaixo de "Clone in Desktop", ele diz "Download Zip file"
  2. Baixar arquivo zip
  3. Extrair o arquivo
Evan Gertis
fonte
Existe alguma maneira de fazer isso de maneira que você tenha o conteúdo do arquivo lfs?
Owl
0

Ou tente isso

const https = require('https');
const fs = require('fs');
const DOMAIN = 'raw.githubusercontent.com';

function writeFile(data, fileName) {
  fs.appendFile(fileName, data.toString(), err => {
    if (err) {
      console.log('error in writing file', err);
    }
  });
}

function EOF(data) {
  console.log('EOF');
}

function getFileName(pathToFile) {
  var result = pathToFile.split('/');
  var splitLength = result.length;
  return result[splitLength - 1];
}
function getFile(branchName, username, repoName, ...pathToFile) {
  pathToFile.forEach(item => {
    const path = `/${username}/${repoName}/${branchName}/${item}`;
    const URL = `${DOMAIN}${path}`;
    const options = {
      hostname: DOMAIN,
      path: path
    };
    var fileName = getFileName(item);

    https
      .get(options, function(res) {
        console.log(res.statusCode);
        /* if file not found */
        if (res.statusCode === 404) {
          console.log('FILE NOT FOUND');
        } else {
          /* if file found */
          res.on('data', data => writeFile(data, fileName));
          res.on('end', data => EOF(data));
        }
      })
      .on('error', function(res) {
        console.log('error in reading URL');
      });
  });
}
getFile('master', 'bansalAyush', 'InstagramClone', '.babelrc', 'README.md');
Ayush Bansal
fonte
0

Usei o seguinte formato e considero importante informar sobre o caminho.

https://github.com/user/repository/raw/branch/filename

^^^ o acima não é muito completo em minha mente

https://github.com/<user>/<repoROOTname>/blob/master/<path>/<filename>?raw=true

alguns disseram raw.github.com ou raw em vez de blob, mas a segunda linha funciona para mim e espero que ajude outras pessoas ...

2 ¢

rezwits
fonte
0

Você pode tentar o github-files-fetcher , é uma ferramenta de linha de comando que baixa uma única pasta ou arquivo de um repositório do GitHub.

Pense em um cenário real: você estava visitando a seguinte página da web e deseja baixar o asyncsubdiretório sozinho.

https://github.com/reduxjs/redux/tree/master/examples

desculpe por não ter permissão para postar imagens.

Com github-files-fetcher, você deve primeiro copiar a urlpágina, https://github.com/reduxjs/redux/tree/master/examples/async , e executar o comando abaixo na linha de comando:

fetcher --url=https://github.com/reduxjs/redux/tree/master/examples/async

Gyumeijie
fonte
-2

Isto é o que funcionou para mim agora ...

  1. Abra o arquivo bruto em uma guia separada.

  2. Copie a coisa toda no seu bloco de notas em um novo arquivo.

  3. Salve o arquivo na extensão original.

testado com um arquivo php que eu baixei agora (no momento da resposta)

Aprendiz
fonte