Skip to content

Instantly share code, notes, and snippets.

@LinuxProativo
Created July 6, 2025 17:56
Show Gist options
  • Select an option

  • Save LinuxProativo/662de298305a7801a56fd6df47d9ece0 to your computer and use it in GitHub Desktop.

Select an option

Save LinuxProativo/662de298305a7801a56fd6df47d9ece0 to your computer and use it in GitHub Desktop.
Como Clonar um Diretório Específico de um Repositório no GitHub

Como Clonar um Diretório Específico de um Repositório no GitHub

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.

Passo a Passo

1. Clonando o repositório com "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.git

Parâ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.

2. Atualizando as referências com a última versão

cd aports/
git fetch --depth=1 --filter=tree:0

Esse 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.

3. Listando os arquivos do repositório

Para descobrir quais arquivos estão disponíveis para checkout:

git ls-tree -r HEAD --name-only

Isso 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.

4. Ativando o modo de sparse-checkout

git sparse-checkout init --cone

Esse comando configura o repositório para usar sparse-checkout, ou seja, para baixar apenas os arquivos/diretórios que você selecionar.

5. Selecionando o diretório ou arquivo desejado

Use set para selecionar o caminho do diretório ou arquivo que você quer baixar, por exemplo main/bash:

git sparse-checkout set main/bash

6. Realizando o checkout

Agora que tudo está configurado, você pode finalmente baixar o conteúdo:

git checkout

Apenas os arquivos dentro de main/bash serão baixados para o seu sistema.

Considerações Finais

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment