Clone superficial do Git: o que é, quando usar e como

Clonar um repositório com git clone
normalmente extrai todo o histórico de commits. Mas e se você não precisar do histórico completo? É aí que entram os clones superficiais. Neste artigo, explicaremos o que é um clone superficial, como ele funciona e quando faz sentido usá-lo — com exemplos prontos para copiar e colar.
Principais Pontos
- Um clone superficial limita a quantidade de histórico buscado durante o
git clone
- É ideal para CI, repositórios grandes ou configurações rápidas
- Aprenda a usar
--depth
,--single-branch
e--shallow-since
O que é um clone superficial no Git?
Um clone superficial é um clone Git que extrai apenas parte do histórico de um repositório em vez de tudo desde o início. Isso reduz significativamente o tamanho e o tempo de download. É especialmente útil quando:
- Você não precisa do histórico completo de commits
- Você quer uma configuração mais rápida para pipelines de CI/CD
- Você está trabalhando com repositórios grandes
Clone superficial vs clone normal
Característica Clone Normal Clone Superficial Busca todo o histórico Sim Não (commits limitados) Velocidade de clonagem Mais lenta Mais rápida Operações Git (rebase, bisect) Totalmente suportadas Algumas limitações Ideal para CI/CD Não é ótimo Sim
Como realizar um clone superficial
Clonar apenas o commit mais recente
git clone --depth=1 https://github.com/owner/repo.git
Clonar um branch específico com histórico limitado
git clone --depth=1 --branch main --single-branch https://github.com/owner/repo.git
Clonar commits a partir de uma data específica
git clone --shallow-since="2024-01-01" https://github.com/owner/repo.git
Você também pode usar --filter=blob:none
com clones parciais se quiser pular completamente o download de arquivos grandes.
É possível “desraseificar” um clone superficial?
Sim. Se mais tarde você decidir que precisa do histórico completo:
git fetch --unshallow
Isso puxa os commits ausentes e converte seu clone superficial em um completo.
Quando você deve usar um clone superficial?
Use um clone superficial quando:
- Você só precisa da versão mais recente do código
- Você está executando pipelines de CI e quer builds mais rápidos
- Você está inspecionando ou testando código sem precisar do histórico completo
Evite clones superficiais quando:
- Você precisa executar
git bisect
,git rebase
ou operações de merge - Você está contribuindo com alterações e precisa acessar o histórico de commits
- Você está escrevendo ferramentas que dependem do contexto completo do repositório
Problemas comuns com clones superficiais
Operações Git podem falhar
Alguns comandos assumem o histórico completo e gerarão erros em clones superficiais:
git merge-base
git rebase
git bisect
Solução: Execute git fetch --unshallow
ou evite o clone superficial nesses contextos.
Clones superficiais podem quebrar ferramentas de monorepo
Ferramentas como Lerna ou Nx podem assumir acesso total ao histórico de commits do repositório para gráficos de dependência ou pacotes afetados. Teste com sua cadeia de ferramentas específica.
Conclusão
Clones superficiais são uma ótima maneira de acelerar fluxos de trabalho de desenvolvimento, especialmente em CI ou ao trabalhar com repositórios grandes. Apenas esteja ciente das compensações — e você sempre pode “desraseificar” mais tarde, se necessário.
Perguntas Frequentes
Sim. Ele busca menos commits, então é mais rápido para baixar e processar, especialmente em repositórios grandes.
Sim, mas algumas operações relacionadas ao histórico podem falhar, a menos que o clone seja primeiro transformado em completo.
Execute `git fetch --unshallow` para converter seu repositório em um clone completo.
Sim — na verdade, o GitHub Actions usa clones superficiais por padrão (com `fetch-depth: 1`).