Baixe uma única pasta ou diretório de um repositório GitHub

1106

Como posso baixar apenas uma pasta ou diretório específico de um repositório Git remoto hospedado no GitHub?

Digamos que o exemplo do repositório GitHub mora aqui:

[email protected]:foobar/Test.git

Sua estrutura de diretórios:

Test/
├── foo/ 
│   ├── a.py
│   └── b.py   
└── bar/
    ├── c.py
    └── d.py

Quero baixar apenas a pasta foo e não clonar todo o projeto de teste.

g_inherit
fonte
4
Eu escrevi um script shell para este usando svn checkout - github.com/Decad/github-downloader
Declan Cozinhe
391
Alguém pode me explicar por que não existe uma solução de interface da web "oficial" para isso? Parece um recurso trivial para implementar, mas super útil.
Alexander - Restabelecer Monica
3
Eu desenvolvi uma extensão chrome usando o gitzip do KinoLien. github.com/charany1/GHSDD
charany1
3
veja @janos resposta svn alternativa é o melhor, não auth, sem registro, sem limite, sem plugins
stackdave
5
Fiz uma solução leve para este ( download-directory.github.io ) e está integrado no refinado GitHub
fregante

Respostas:

1034

Atualização em setembro de 2016: existem algumas ferramentas criadas pela comunidade que podem fazer isso por você:


O Git não suporta isso, mas o Github via SVN. Se você fizer o checkout do seu código com o subversion, o Github basicamente converterá o repositório do git para o subversion no back-end, servindo o diretório solicitado.

Veja como você pode usar esse recurso para baixar uma pasta específica. Vou usar a popular biblioteca javascript lodashcomo exemplo.

  1. Navegue até a pasta que deseja baixar . Vamos fazer o download /testda masterfilial. Exemplo de URL de repositório do github

  2. Modifique a URL para subversão . Substitua tree/masterpor trunk.

    https://github.com/lodash/lodash/tree/master/test

    https://github.com/lodash/lodash/trunk/test

  3. Baixar a pasta . Vá para a linha de comando e pegue a pasta com SVN.

svn checkout https://github.com/lodash/lodash/trunk/test

Você pode não ver nenhuma atividade imediatamente, porque o Github leva até 30 segundos para converter repositórios maiores, portanto, seja paciente.

Explicação completa do formato do URL:

  • Se você estiver interessado na masterfilial, use trunk. Portanto, o caminho completo étrunk/foldername
  • Se você estiver interessado na foofilial, use branches/foo. O caminho completo parecebranches/foo/foldername
  • Protip: você pode usar svn lspara ver as tags e ramificações disponíveis antes de fazer o download, se desejar

Isso é tudo! O Github também suporta mais recursos de subversão , incluindo suporte para confirmar e enviar alterações.

usuario
fonte
162
Impressionante, basta substituir tree/masterpor trunke você pode obter a pasta específica.
Sérgio Michels
6
Graças @ user1146881 e @ SérgioMichels, você tem que substituir tree/mastercom trunk. Esta informação deve ser adicionada em resposta.
baptx
8
Eu modifiquei isso para usar svn export, pois não queria uma cópia de trabalho do Subversion. Então eu adicionei a pasta resultante no Git. (De alguma forma, perdi uma grande parte da minha árvore de diretórios, então exportei do
repositório que bifurquei
5
@ num3ric- desculpe pela resposta tardia, mas você deve conseguir substituir "trunk" por "branches / yourbranch"
nick
2
@ElijahLynn Obrigado pela edição, eu deveria ter incluído essa informação! Porém, duas coisas - eu aceitei sua edição, mas revirei algumas das minhas (estava pretendendo fazer isso de qualquer maneira, parecia muito bagunçado). Além disso, mudei seu branchcaminho para branches, o que acho correto; caso contrário, vá em frente e troque de volta.
nick
567

Duas opções para esse recurso:

Opção 1: extensão do navegador GitZip

Extensão do Chrome , Firefox Addon

Uso:

  1. Em qualquer página de repositórios do GitHub.
  2. Basta clicar duas vezes na parte em branco dos itens necessários.
  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.

Obter token:

  1. Clique no ícone da extensão GitZip no seu navegador.
  2. Clique no link "Normal" ou "Privado", além de "Obter token".
  3. Autorize a permissão GitZip na página de autenticação do Github.
  4. Voltar à página de repo do início.
  5. Continue a usar.

Opção 2: Github gh-page

http://kinolien.github.io/gitzip usando as bibliotecas API GitHub e JSZip, FileSaver.js.

Etapa 1: insira o URL do github no campo no canto superior direito.
Etapa 2: pressione enter ou clique em download para zip de download diretamente ou clique em pesquisar para exibir a lista de subpastas e arquivos.
Passo 3: Clique em "Download Zip File" ou "Get File" para obter arquivos.

Na maioria dos casos, funciona bem, exceto que a pasta contém mais de 1.000 arquivos, devido à limitação da API do Github Trees. (refere-se ao conteúdo da API do Github )

E também pode oferecer suporte a repositórios públicos / privados e atualizar o limite de taxa, se você tiver uma conta do GitHub e usar o link "obter token" neste site.

Kino
fonte
5
Isso é incrível, mas parece tão impressionante que a demanda está pressionando o seu limite de rato e, portanto, não está mais funcionando ;-) Seria ótimo poder fazer login com o GitHub oAuth - o que permitiria suporte a repo privado e também aumentaria seu limite de taxa, uma vez que estaria autenticado pedidos
hobailey
3
@hobailey Agora, ele pode obter token de acesso para aumentar o limite de taxa e também acessar repositórios particulares.
Kino
1
@MYounas Veja os capítulos sobre OAuth, Trees, Blobs no Github API Doc. e também use as bibliotecas JSZip, FileSaver.js js para implementação do gitzip.
Kino
1
Alguém estaria interessado em uma extensão do Chrome que faz isso?
precisa saber é
4
Isso realmente precisa ser adicionado ao site real do github, é extremamente útil.
rola
508

Vá para DownGit > Digite seu URL> Download!

Agora, você pode BAIXAR DIRETAMENTE ou criar LINK DE DOWNLOAD para qualquer diretório ou arquivo público do GitHub (arquivo especialmente grande ) do DownGit ! Aqui está uma demonstração simples -


DownGit


Você também pode configurar o uso detalhado da propriedade do arquivo baixado .

Minhas Kamal
fonte
2
Bro, quero dizer como criar um projeto como o DownGit que você criou.
Muhammad Younus
12
O método base é: 1. pegue o link do diretório ( rota angular usada ), 2. vá para a API do GitHub , 3. pesquise no diretório e baixe todos os arquivos, 4. crie um arquivo zip com ele (eu usei o jszip ) & salve-o como arquivo (usado para o salvamento de arquivos ). Para uma compreensão clara, sugiro dar uma olhada no meu projeto .
Minhas Kamal
1
thanx Bro, para instruções detalhadas, sou muito grato a você se você sugerir algum tutorial ou link.
Muhammad Younus
5
Isso é legal, mas ele não funciona com ferramentas automatizadas (como wget)
Anel
1
Isso fica suspenso downloaded 25 of 25 filesquando tento fazer o download desta URL: github.com/dssg/hitchhikers-guide/tree/master/curriculum/…
Wassadamo 22/11/18
164

Se você tiver svn, pode svn exportfazer isso:

svn export https://github.com/foobar/Test.git/trunk/foo

Observe o formato do URL:

  • O URL base é https://github.com/
  • /trunk anexado no final

Antes de executar svn export, é bom verificar primeiro o conteúdo do diretório com:

svn ls https://github.com/foobar/Test.git/trunk/foo
janos
fonte
Isso ainda funciona? Tentei isso com o TortiseSVN e recebo um erro de permissão, solicitando que eu fornecesse credenciais.
John
2
@ john Tenho certeza que é tarde demais para ajudar bastante, mas você tem a autenticação de dois fatores ativada na sua conta do GitHub? Nesse caso, acho que li em algum lugar que você precisará usar uma chave pré-gerada para a senha (que você precisará encontrar nas configurações do GitHub).
nick
1
Em relação à formatação do URL, você pode manter a .gitextensão. Você pode usar o link completo do projeto e começar usando svn lsseguido pelo caminho completo do projeto. Exemplo: svn ls https://github.com/RobTillaart/Arduino.git. Para exportar apenas uma pasta, basta adicionar o /trunkseguido pelo caminho desejado, como svn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlib. É mais fácil manter o caminho do projeto intacto.
jgrocha
@jgrocha Não tenho certeza de que funcionou dessa maneira em 2013, mas agora, então, obrigado, atualizou o post
janos
1
Um exemplo: para baixar o conteúdo https://github.com/miguelgrinberg/python-socketio/tree/master/examples/wsgi, execute svn export https://github.com/miguelgrinberg/python-socketio.git/trunk/examples/wsgi. Um diretório chamado wsgiserá criado no diretório de trabalho atual. Apenas arquivos de origem, nada mais. Não .git, não há arquivos relacionados ao subversion.
Rockallite
74

Para um repositório genérico do git:

Se você deseja baixar arquivos, não clonar o repositório com histórico, você pode fazer isso com git-archive.

git-archivecria um arquivo compactado zip ou tar de um repositório git. Algumas coisas que o tornam especial:

  1. Você pode escolher quais arquivos ou diretórios no repositório git arquivar.
  2. Ele não arquiva a .git/pasta ou nenhum arquivo não rastreado no repositório em que é executado.
  3. Você pode arquivar uma ramificação, marca ou confirmação específica. Os projetos gerenciados com o git geralmente usam isso para gerar arquivos de versões do projeto (beta, release, 2.0, etc.) para download dos usuários.

Um exemplo de criação de um arquivo morto do docs/usagediretório a partir de um repositório remoto ao qual você está conectado com o ssh:

# in terminal
$ git archive --format tar --remote ssh://server.org/path/to/git HEAD docs/usage > /tmp/usage_docs.tar

Mais informações nesta postagem do blog e na documentação do git .

Nota sobre os repositórios do GitHub:

O GitHub não permite git-archiveacesso . ☹️

RobW
fonte
2
git archive --format tarO formato não é tar.gz, mas tar.
precisa saber é o seguinte
Esta deve ser a melhor resposta
Felipe Costa
2
Eu acho que essa é a melhor resposta, mas observe que o comando git archive não funciona com o protocolo https.
bitfox 8/03/19
@yukihane extensão editada de tar.gz. de alcatrão, esperançosamente OP é de bordo com esta
mihai
36

Eu criei um projeto de código aberto, chamado GitHubFolderDownloader . Permite baixar uma única pasta de um repositório sem clonar ou baixar o repositório inteiro.

VahidN
fonte
Funciona muito bem se você só precisa baixar pastas do GitHub. Ele só precisa de um token do Github para baixar a pasta desejada. Mais votos positivos podem dar a esta resposta algum destaque.
Alex Essilfie
34

Não há nada de errado com outras respostas, mas pensei em compartilhar instruções passo a passo para aqueles que vagam por esse processo pela primeira vez.

Como baixar uma única pasta de um repositório do github (Mac OS X):

~ Para abrir o Terminal, clique em holofotes e digite terminal e pressione enter

  1. Em um Mac, você provavelmente já possui SVN (para testar apenas abra o terminal e digite "svn" ou "which svn" ~ sem as aspas)
  2. No Github: Localize o caminho do Github para sua pasta git (não para o repositório) clicando no nome da pasta específica em um repositório
  3. Copie o caminho da barra de endereço do navegador
  4. Abra Terminal e digite: svn export
  5. Em seguida, cole o endereço (por exemplo): https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
  6. Substitua as palavras: árvore / mestre
  7. com a palavra: tronco
  8. Digite a pasta de destino para os arquivos (neste exemplo, eu armazeno a pasta de destino dentro da pasta Downloads para o usuário atual)
  9. Aqui o espaço é apenas a barra de espaço e não a palavra (espaço) ~ / Downloads / HeadsUpUI
  10. O comando final do terminal mostra o comando completo para baixar a pasta (compare o endereço com a etapa 5) svn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI ~ / Downloads / HeadsUpUI

BTW - Se você estiver no Windows ou em alguma outra plataforma, poderá encontrar um download binário do subversion (svn) em http://subversion.apache.org

~ Se você quiser fazer o checkout da pasta em vez de simplesmente fazer o download, tente usar a ajuda do svn (tldr: substitua a exportação pelo checkout )

Atualizar

Sobre o comentário sobre a retomada de um download / checkout interrompido. Eu tentaria correr svn cleanupseguido por svn update. Por favor, pesquise SO para opções adicionais.

Tommie C.
fonte
1
Eu tenho que baixar muitos arquivos de uma pasta específica e recebi esse erro no meio do download: svn: E175002: RELATÓRIO de '/ bgmartins / scripts-parlamento /! Svn / vcc / default': 200 OK ( github.com ) Como posso retomar o download?
Miguel
Trabalhou para mim. Isso é incrível.
Heath Raftery
24

Quem estiver trabalhando em uma pasta específica, precisará clonar a própria pasta em particular. Para isso, siga as etapas abaixo usando a verificação esparsa.

  1. Crie um diretório

  2. Inicialize um repositório Git. ( git init)

  3. Ativar verificações esparsas. ( git config core.sparsecheckout true)

  4. Diga ao Git quais diretórios você deseja (eco 2015 / brand / May (consulte a pasta na qual você deseja trabalhar) >> .git/info/sparse-checkout)

  5. Adicione o controle remoto ( git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git)

  6. Busque os arquivos ( git pull origin master)

Mohammed Jafar
fonte
Pena que este comentário não recebeu votos suficientes. Parece que a solução fornecida se aplica a todos os repositórios git e não apenas ao repositório github.
Kalyan
9
Na verdade, isso não faz o que era desejado. Ele ainda clona todo o repositório, apenas não verifica algumas pastas.
Chris
Eu recebo este erro: A verificação esparsa não deixa nenhuma entrada no diretório de trabalho.
orangecaterpillar 5/04
20

Você não pode; Diferentemente do Subversion, onde cada subdiretório pode ser retirado individualmente, o Git opera com base em todo o repositório.

Para projetos em que o acesso mais refinado é necessário, você pode usar submódulos - cada submódulo é um projeto Git separado e, portanto, pode ser clonado individualmente.

É concebível que um front-end do Git (por exemplo, a interface da web do GitHub ou gitweb) possa optar por fornecer uma interface para você extrair uma determinada pasta, mas que eu saiba, nenhum deles faz isso (embora eles permitam baixar arquivos individuais , portanto, se a pasta não contiver muitos arquivos, isso é uma opção)

Editar - o GitHub realmente oferece acesso via SVN, o que permitiria fazer exatamente isso (conforme comentário). Consulte https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away para obter instruções mais recentes sobre como fazer isso

michel-slm
fonte
existe alguma coisa via API do github?
precisa saber é o seguinte
14

Se você realmente deseja apenas "baixar" a pasta e não "cloná- la " (para desenvolvimento), a maneira mais fácil de obter uma cópia da versão mais recente do repositório (e, portanto, de uma pasta / arquivo), sem a necessidade de clonar o repositório inteiro ou instalar o git em primeiro lugar, é fazer o download de um arquivo zip (para qualquer repositório, bifurcação, ramificação, confirmação, etc.) acessando o repositório desejado / fork / branch / commit no GitHub (por exemplo, http(s)://github.com/<user>/<repo>/commit/<Sha1>para uma cópia dos arquivos como estavam após uma confirmação específica) e selecionar o Downloadsbotão próximo ao canto superior direito.

Esse formato de arquivo não contém nenhuma mágica do git-repo, apenas os arquivos rastreados (e talvez alguns arquivos .gitignore, se eles foram rastreados, mas você pode ignorá-los: p) - isso significa que, se o código for alterado e você desejar fique por dentro, você terá que fazer o download novamente manualmente, e também significa que você não poderá usá-lo como um repositório git ...

Não tenho certeza se é isso que você está procurando neste caso (novamente, "download" / view vs "clone" / develop), mas ainda assim pode ser útil ...

johnny
fonte
9
Se você não vir um link para download, verifique se está em uma página principal de repositório (não em um diretório filho). Parece que você pode fazer o download apenas de um zip de todo o repositório. Além disso, esta página de ajuda do github pode ser útil.
JD Smith #
2
Acesso fácil apontar e clicar. Fácil de obter uma versão anterior. Fácil de puxar a pasta desejada para fora do zip baixado. Obrigado.
Andy Thomas
1
O URL genérico para obter o download em tar.gz:https://github.com/${owner}/${repo}/archive/${hash}.tar.gz
Krisztian 12/08
11

2019 Resumo

Existem várias maneiras de lidar com isso, dependendo se você deseja ou não fazer isso manual ou programaticamente.

Existem quatro 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 .

Também publiquei uma resposta semelhante no StackOverflow para aqueles que precisam baixar arquivos únicos do GitHub (em vez de pastas).


1. Interface de usuário do GitHub

  • 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 a pasta específica necessária.

2. 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 na pasta (por exemplo https://github.com/babel/babel-eslint/tree/master/lib) e pressionar o botão "Download".

3. Subversão

  • O GitHub não suporta git-archive (o recurso git que nos permitiria baixar pastas específicas). 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 a pasta 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 a pasta aninhada. Em outras palavras, usando o mesmo exemplo de link de pasta que mencionei acima, substituiríamos "tree / 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/libe pressione enter.

4. API do GitHub

  • Esta é a solução que você precisará se desejar realizar esta tarefa programaticamente. E é isso que o DownGit está usando sob o capô. Usando a API REST do GitHub , escreva um script que faça uma solicitação GET no 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 de terminal é:https://api.github.com/repos/babel/babel-eslint/contents/lib. Isso fornece dados JSON para todo o conteúdo existente nessa pasta. Os dados têm tudo o que você precisa, incluindo se o conteúdo é ou não uma pasta ou arquivo, um URL de download, se for um arquivo, e um ponto de extremidade da API, se for uma pasta (para que você possa obter os dados dessa pasta). Usando esses dados, o script pode percorrer recursivamente todo o conteúdo da pasta de destino, criar pastas para pastas aninhadas e baixar todos os arquivos de cada pasta. Confira o código do DownGit para se inspirar.
jabacchetta
fonte
9

Outro exemplo específico:

Como eu quero baixar a pasta 'iOS Pro Geo' a partir do URL

https://github.com/alokc83/APRESS-Books-Source-Code-/ tree / master /% 20Pro% 20iOS% 20Geo

e eu posso fazer isso via

svn checkout https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo

Observe o tronco no caminho

Editado: (conforme comentário de Tommie C)

Sim, usar a exportação em vez do checkout daria uma cópia limpa sem arquivos extras do repositório git.

svn export https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo

Editado: se a árvore / mestre não estiver no URL, bifurque-o e ele estará lá no URL bifurcado.

zeeawan
fonte
2
Só é necessário alterar o checkout para exportar, se você quiser apenas fazer o download de uma cópia da pasta em vez de fazer o checkout.
Tommie C.
Obrigado pela sua resposta, podemos mergulhar em uma filial? Vamos dizer que eu quero fazer o download pasta aaa do ramo feature1
hsafarya
7

Existe um pacote pip Python3 chamado githubdlque pode fazer isso *:

export GIT_TOKEN=1234567890123456789012345678901234567890123
pip install githubdl
githubdl -u http://github.com/foobar/test -d foo

A página do projeto está aqui

* Aviso: eu escrevi este pacote.

Willem van Ketwich
fonte
6

É um dos poucos lugares onde o SVN é melhor que o Git.

No final, gravitamos em direção a três opções:

  1. Use o wget para obter os dados do GitHub (usando a visualização de arquivo bruto).
  2. Faça com que os projetos upstream publiquem o subconjunto de dados necessário como artefatos de construção.
  3. Desista e use o checkout completo. É um grande sucesso na primeira compilação, mas, a menos que você tenha muito tráfego, não há muita dificuldade nas compilações a seguir.
Manish Shrivastava
fonte
4
Bem, é menos Git vs Subversion e mais que o GitHub não permite o git-archive. (Eu adoraria saber o porquê.)
Rob Howard
6

Se você se sente confortável com os comandos unix, não precisa de dependências especiais ou aplicativos da web para isso. Você pode fazer o download do repositório como um tarball e descompactar apenas o necessário.

Exemplo (arquivos woff2 de um subdiretório em fontawesome):

curl -L https://api.github.com/repos/FortAwesome/Font-Awesome/tarball | tar xz --wildcards "*/web-fonts-with-css/webfonts/*.woff2" --strip-components=3
  • Mais sobre o formato do link: https://developer.github.com/v3/repos/contents/#get-archive-link (incluindo como obter um arquivo zip ou ramificações / refs específicas)
  • Mantenha a parte inicial do caminho ( */) para corresponder a qualquer diretório. O Github cria um diretório de wrapper com o commit ref no nome, portanto ele não pode ser conhecido.
  • Você provavelmente quer --strip-componentsser igual à quantidade de barras ( /) no caminho (argumento anterior).

Isso fará o download do pacote completo. Use o método SVN mencionado nas outras respostas se isso tiver que ser evitado ou se você quiser ser legal com os servidores GitHub.

Albin
fonte
5

Você pode fazer um download simples da árvore de diretórios:

git archive --remote [email protected]:foobar/Test.git HEAD:foo | tar xf -

Mas se você quiser dar uma olhada e conseguir fazer commit e empurrá-los de volta, não, não pode fazer isso.

araqnid
fonte
1
Comando inválido: 'git-upload-archive' foobar / Test.git '' Você parece estar usando ssh para clonar um URL git: //. Verifique se a opção de configuração core.gitProxy e a variável de ambiente GIT_PROXY_COMMAND NÃO estão definidas. fatal: O lado remoto desligou inesperadamente tar: Este não parece ser um arquivo tar tar: Saindo com status de falha devido a erros anteriores
g_inherit
@g_inherit Posso reproduzir esse problema. Embora essa possa ser a direção certa, esta resposta é inválida.
Uli Köhler
apesar de tantos votos negativos, este é o único conselho que funcionou para mim.
precisa saber é o seguinte
5

Apenas para amplificar as respostas acima, um exemplo real de um repositório GitHub real para um diretório local seria:

svn ls https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces

svn export https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces  /temp/SvnExport/Washburn

Às vezes, um exemplo concreto ajuda a esclarecer as substituições propostas.

John Washburn
fonte
5

Nenhuma das respostas ajudou na minha situação. Se você está desenvolvendo para o Windows, provavelmente não possui o svn. Em muitas situações, não é possível contar com os usuários para que o Git esteja instalado ou não desejar baixar repositórios inteiros por outros motivos. Algumas das pessoas que responderam a essa pergunta, como Willem van Ketwich e aztack, criaram ferramentas para realizar essa tarefa. No entanto, se a ferramenta não foi escrita para o idioma que você está usando ou se não deseja instalar uma biblioteca de terceiros, elas não funcionam.

No entanto, existe uma maneira muito mais fácil. O GitHub possui uma API que permite baixar um único arquivo ou o conteúdo de um diretório inteiro usando solicitações GET . Você pode acessar um diretório usando https://api.github.com/repos/:owner/:repo_name/contents/:pathque retorna um objeto JSON enumerando todos os arquivos no diretório Incluído na enumeração, há um link para o conteúdo bruto do arquivo, o download_urlparâmetro O arquivo pode ser baixado usando esse URL.

É um processo de duas etapas que requer a capacidade de fazer solicitações GET, mas isso pode ser implementado em praticamente qualquer idioma, em qualquer plataforma. Pode ser usado para obter arquivos ou diretórios.

Calvin
fonte
4

Eu uso o linux, coloque isso em ~ / .bashrc, chamado even: D $ HOME / .bashrc

git-dowloadfolder(){
a="$1"
svn checkout ${a/tree\/master/trunk}

}

atualize o shell com

source ~/.bashrc 

use-o com o git-downloadfolder blablabla: D

user1088530
fonte
3

Eu trabalho com servidores CentOS 7 nos quais não tenho acesso root, nem git, svn, etc (nem quero!), Então criei um script python para baixar qualquer pasta do github: https://github.com/andrrrl/github -folder-downloader

O uso é simples, basta copiar a parte relevante de um projeto do github, digamos que o projeto seja https://github.com/MaxCDN/php-maxcdn/ , e você deseja uma pasta em que apenas alguns arquivos de origem sejam necessários, é necessário faça algo como:

$ python gdownload.py "/MaxCDN/php-maxcdn/tree/master/src" /my/target/dir/
(criará a pasta de destino se não existir)

Requer biblioteca lxml , pode ser instalado com easy_install lxml
Se você não tiver acesso root (como eu), poderá criar um .pydistutils.pyarquivo no seu $HOMEdiretório com o seguinte conteúdo: [install] user=1 E easy_install lxmlfuncionará apenas (ref: https://stackoverflow.com/a/ 33464597/591257 ).

aesede
fonte
3

Apenas 5 etapas a seguir

1) Baixar SVN partir de aqui .
2) Abra o CMD e vá para o diretório bin SVN como abaixo:

cd %ProgramFiles%\SlikSvn\bin

3) Vamos supor que eu wan para baixar este diretório URL 4) Agora Substituir Com 5) Agora disparar este último comando à pasta de download no mesmo diretório.
https://github.com/ZeBobo5/Vlc.DotNet/tree/develop/src/Samples

tree/develop
or
tree/master
trunk

svn export https://github.com/ZeBobo5/Vlc.DotNet/trunk/src/Samples

Muhammad Ali
fonte
Isso não parece funcionar para acordos privados
Sundeep Pidugu
Sim, ele não funcionará para respos particulares, o GIT é recomendado para baixar respo privado.
Muhammad Ali
2

Para exportar um diretório do GitHub, substitua "/ tree / master /" na URL do diretório por "/ trunk /".

Por exemplo, para exportar o diretório da seguinte URL:

https://github.com/liferay/liferay-plugins/tree/master/portlets/sample-hibernate-portlet

execute o seguinte comando:

svn export https://github.com/liferay/liferay-plugins/trunk/portlets/sample-hibernate-portlet
Mohsen Abasi
fonte
2

Uma resposta direta a isso é primeiro tortoise svn a partir do link a seguir.

https://tortoisesvn.net/downloads.html

durante a instalação, ative a opção CLI, para que possa ser usada na interface da linha de comandos.

copie o link do subdiretório git hub.

Exemplo

https://github.com/tensorflow/models/tree/master/research/deeplab

substituir árvore / mestre por tronco

https://github.com/tensorflow/models/trunk/research/deeplab

e fazer

svn checkout https://github.com/tensorflow/models/trunk/research/deeplab

os arquivos serão baixados para a pasta deeplab no diretório atual.

Khan
fonte
2

você pode usar o git svn da seguinte maneira.

git svn clone https://github.com/lodash/lodash/trunk/test

Dessa forma, você não precisa se preocupar em definir o svn, especificamente para usuários do Windows.

V3K3R
fonte
Obrigado. Posso garantir que ele funciona no Windows. Porém, não funciona no gcloud. Diz git: 'svn' não é um comando
JOSEPH Blessingh
sudo apt install git-svné necessário ao executar o WSL.
Jammy Dodger 31/03
1

Use esta função, o primeiro argumento é o URL da pasta, o segundo é o local para o qual a pasta será baixada:

function github-dir() {
    svn export "$(sed 's/tree\/master/trunk/' <<< "$1")" "$2"  
}
Cara feliz
fonte
1

git clone --filter do Git 2.19

Essa opção realmente ignora a busca de objetos desnecessários do servidor:

git clone --depth 1 --no-checkout --filter=blob:none \
  "file://$(pwd)/server_repo" local_repo
cd local_repo
git checkout master -- mydir/

O servidor deve ser configurado com:

git config --local uploadpack.allowfilter 1
git config --local uploadpack.allowanysha1inwant 1

Foi feita uma extensão ao protocolo remoto Git para suportar esse recurso na v2.19.0, mas não há suporte para o servidor no momento. Mas já pode ser testado localmente.

Eu cobri isso com mais detalhes em: Como clonar um subdiretório apenas de um repositório Git?

Ciro Santilli adicionou uma nova foto
fonte
1
Interessante e votado. Suponho que devo ter mencionado esse recurso 2.19 em outro lugar.
VonC 8/06/19
@VonC Acho que venci você desta vez: stackoverflow.com/questions/2466735/… e só olhei após o lançamento do XD! Eu estava pesquisando hoje no Google um pouco depois da versão 2.22, todas as respostas já foram atualizadas ;-) Nunca deixa de me divertir como sempre há mais uma semi-duplicata, sempre, e acabo encontrando-a um ano depois com uma consulta ligeiramente diferente. Eu não pretendo bater em você no Git, no entanto, com muita força, mas fique de olho na contagem de necromantes! haha
Ciro Santilli escreveu
Bem, manter o bom trabalho: a toda a comunidade irão beneficiar desta pouca concorrência lado (e eu fiz upvote sua outra resposta na época)
VonC
@VonC brincando, é claro, eu também votei nas suas coisas, obviamente. Eu só preciso encontrar uma maneira de resgatar os pontos em dinheiro agora XD
Ciro Santilli郝海东冠状病六四事件法轮功
1

Por qualquer motivo, a svnsolução não funciona para mim e, como não preciso de svnmais nada, não fazia sentido gastar tempo tentando fazê-lo, então procurei uma solução simples usando as ferramentas que já possuía. Este script usa apenas curle awkpara baixar todos os arquivos em um diretório do GitHub descrito como "/:user:repo/contents/:path".

O corpo retornado de uma chamada para o "GET /repos/:user:repo/contents/:path"comando API REST do GitHub retorna um objeto que inclui um "download_url"link para cada arquivo em um diretório.

Esse script de linha de comando chama a API REST usando curle envia o resultado por meio do AWK, que filtra todas as linhas, exceto as "download_url", apaga aspas e vírgulas dos links e baixa os links usando outra chamada para curl.

curl -s https://api.github.com/repos/:user/:repo/contents/:path | awk \
     '/download_url/ { gsub("\"|,", "", $2); system("curl -O "$2"); }'
Pinha
fonte
1

git sparse-checkout

O Git 2.25.0 inclui um novo git sparse-checkoutcomando experimental que facilita o uso do recurso existente, além de alguns importantes benefícios de desempenho para grandes repositórios. ( O blog do GitHub )

Exemplo com versão atual :

git clone --filter=blob:none --sparse https://github.com/git/git.git
cd git
git sparse-checkout init --cone
git sparse-checkout add t

Mais notavelmente

  • --sparseverifica apenas os arquivos de diretório de nível superior do gitrepositório na cópia de trabalho
  • git sparse-checkout add tadiciona / verifica incrementalmente a tsubpasta degit

Outros elementos

  • git sparse-checkout init faz alguns preparativos para permitir checkouts parciais
  • --filter=blob:noneotimiza a busca de dados baixando apenas os objetos git necessários (veja o recurso de clone parcial para obter mais informações)
  • --cone também acelera o desempenho aplicando padrões de inclusão de arquivo mais restritos

Status do GitHub

O GitHub ainda está avaliando esse recurso internamente, enquanto está ativado em alguns poucos repositórios [...]. À medida que o recurso se estabiliza e amadurece, manteremos você atualizado com seu progresso. ( docs )

ford04
fonte
Votado. Apresentei esse comando em stackoverflow.com/a/59515426/6309 , com o padrão de clone definido.
VonC