Por exemplo, quero fazer o download do PCL 3d_rec_framework.
Este é o repositório git do PCL: https://github.com/PointCloudLibrary/pcl.git
Como baixar este diretório?
https://github.com/PointCloudLibrary/pcl/tree/master/apps
Eu tentei executar, mas não funciona:
sam@sam:~/code/pcl_standalone$ git clone https://github.com/PointCloudLibrary/pcl/tree/master/apps/3d_rec_framework
Cloning into '3d_rec_framework'...
error: The requested URL returned error: 403 while accessing https://github.com/PointCloudLibrary/pcl/tree/master/apps/3d_rec_framework/info/refs
fatal: HTTP request failed
sam@sam:~/code/pcl_standalone$
Como fazer o download?
A propósito, eu não quero baixar o git do PCL e remover todos os outros diretórios que eu não quero. É por isso que faço essa pergunta.
Obrigado ~
A resposta do dobey não é mais o caso desde o git v1.7. Agora você pode fazer o checkout de determinadas pastas em um repositório. As instruções completas são encontradas aqui .
Isso informa ao git quais diretórios você deseja fazer o checkout. Então você pode puxar apenas esses diretórios
fonte
Primeiro, faça:
Então:
...E por fim:
É tão fácil. O Git reescreverá o repositório para que apenas o subdiretório desejado seja incluído. Isso funciona mesmo que o subdiretório tenha várias camadas de profundidade. Apenas nomeie o diretório de destino como o nome do subdiretório. Em seguida, no comando "git filter-branch", coloque o caminho relativo para o subdiretório. Ah, o
--depth 1
guia dizgit
para baixar apenas o topo da cabeça ( essencialmente removendo a história ).fonte
git clone --filter
do Git 2.19Esta opção realmente pula a busca da maioria dos objetos desnecessários do servidor:
O servidor deve ser configurado com:
Não há suporte para servidor a partir da v2.19.0, mas ele já pode ser testado localmente.
TODO:
--filter=blob:none
ignora todos os blobs, mas ainda busca todos os objetos da árvore. Mas em um repositório normal, isso deve ser minúsculo em comparação com os próprios arquivos, portanto, isso já é bom o suficiente. Perguntado em: https://www.spinics.net/lists/git/msg342006.html Os Devs responderam que um--filter=tree:0
está sendo trabalhado para fazer isso.Lembre-se de que isso
--depth 1
já implica--single-branch
, consulte também: /programming/1778088/how-to-clone-a-single-branch-in-gitfile://$(path)
é necessário para superar asgit clone
travessuras de protocolo: /programming/47307578/how-to-shallow-clone-a-local-git-repository-with-a-relative-pathO formato de
--filter
está documentado emman git-rev-list
.Foi feita uma extensão ao protocolo remoto Git para suportar esse recurso.
Documentos na árvore Git:
Consulte também: /programming/2466735/how-to-checkout-only-one-file-from-git-repository-sparse-checkout
Teste
GitHub upstream .
Saída no Git v2.19.0:
Conclusões: todos os blobs, exceto,
d1/a
estão ausentes. Por exemplof70a17f51b7b30fec48a32e4f19ac15e261fd1a4
, ou sejad1/b
, não existe após o check-outd1/
.Note-se que
root/root
emybranch/mybranch
também estão desaparecidos, mas--depth 1
esconde que a partir da lista de arquivos ausentes. Se você remover--depth 1
, eles serão exibidos na lista de arquivos ausentes.fonte
Para repositórios GitHub, você pode clonar qualquer subdiretório de qualquer repositório GitHub (em qualquer referência) usando https://github.com/HR/github-clone
fonte