Em muitos cenários, você pode precisar apenas de uma parte específica de um repositório GitHub em vez de clonar o projeto inteiro. Isso é especialmente útil quando se lida com grandes repositórios, como o do Alpine Linux ("aports"), que possui milhares de arquivos. Neste artigo, vamos aprender como clonar apenas um diretório específico de um repositório utilizando recursos modernos do Git, como sparse-checkout e partial clone.
Use o comando abaixo para fazer o clone do repositório sem baixar o histórico completo e nem o conteúdo de todos os arquivos:
git clone --depth=1 --filter=tree:0 --no-checkout https://github.com/alpinelinux/aports.gitParâmetros:
--depth=1: clona apenas o histórico mais recente (shallow clone);--filter=tree:0: evita o download das árvores de diretório e arquivos;--no-checkout: impede que os arquivos sejam automaticamente extraídos após o clone.
cd aports/
git fetch --depth=1 --filter=tree:0Esse comando atualiza as referências locais do repositório com os dados mais recentes do repositório remoto, sem baixar os arquivos ou o histórico completo, graças aos filtros aplicados. Ele busca atualizações do repositório remoto (como commits e branches) e atualiza o repositório local com essas referências.
Para descobrir quais arquivos estão disponíveis para checkout:
git ls-tree -r HEAD --name-onlyIsso lista todos os arquivos do commit, sem baixá-los fisicamente, apenas revelando sua estrutura lógica no repositório.
Parâmetros:
-r: lista recursivamente todos os arquivos, incluindo os que estão em subdiretórios.--name-only: exibe apenas os nomes dos arquivos, sem detalhes adicionais (como tipo de objeto, hash ou permissões).HEAD: refere-se ao commit atual, mas pode ser usado outro hash ou referência.
git sparse-checkout init --coneEsse comando configura o repositório para usar sparse-checkout, ou seja, para baixar apenas os arquivos/diretórios que você selecionar.
Use set para selecionar o caminho do diretório ou arquivo que você quer baixar, por exemplo main/bash:
git sparse-checkout set main/bashAgora que tudo está configurado, você pode finalmente baixar o conteúdo:
git checkoutApenas os arquivos dentro de main/bash serão baixados para o seu sistema.
Esse método é eficiente e economiza largura de banda, tempo e espaço em disco, principalmente quando se trabalha com repositórios grandes. Ele é compatível com Git 2.25 ou superior, então certifique-se de estar usando uma versão recente do Git. Com esses passos, você consegue obter apenas o que realmente precisa de um repositório GitHub!