Pular para o conteúdo principal
InicioTutoriaisGit

Git Prune: O que é o Git Pruning e como usar o Git Prune

O Git prune é um comando do Git que remove objetos do repositório que não são mais acessíveis a partir de qualquer commit ou branch, ajudando a liberar espaço em disco.
Actualizado 29 de ago. de 2024  · 5 min leer

A abordagem protetora do GitA abordagem de proteção do Git para a exclusão de dados evita a perda acidental de commits ou dados importantes.

No entanto, isso pode fazer com que dados desatualizados, como referências a ramificações excluídas, permaneçam visíveis. Com o tempo, os repositórios do Git podem acumular objetos não referenciados, que consomem espaço em disco desnecessário e podem causar confusão.

O comandogit prune é um utilitário de limpeza no Git, projetado principalmente para limpar objetos inacessíveis no repositório.

Um objeto inacessível é um objeto que não pode ser acessado por nenhuma ramificação, tag, ramificação de rastreamento remoto ou outra referência. Esses objetos podem consumir espaço no repositório, sobrecarregando-o com dados desnecessários ao longo do tempo.

Embora o git prune seja uma ferramenta poderosa para manter os repositórios enxutos, a maioria dos usuários talvez não precise usá-lo diretamente devido à coleta automática de lixo do Git (git gc). No entanto, compreender seu papel e função pode ser útil para usuários avançados do Git ou em cenários específicos em que a manutenção manual do repositório é necessária ou preferida.

O que é git prune?

O comando git prune é usado para remover objetos que não são mais necessários no repositório local. Esses objetos podem ser commits, árvores (snapshots de diretório), blobs (arquivos) e tags que não são mais acessíveis a partir de qualquer branch ou tag no repositório.

Em poucas palavras, o git prune ajuda a limpar arquivos e dados desnecessários no repositório, economizando espaço e reduzindo a desordem.

Como os objetos podem se tornar inacessíveis?

Os objetos podem se tornar inacessíveis de várias maneiras - por exemplo, excluindo ramificações ou reescrevendo commits. Quando as ramificações são excluídas, todos os commits exclusivos dessas ramificações que não fazem parte de nenhuma outra ramificação ou tag tornam-se inacessíveis.

A reescrita de commits, usando comandos como git rebase, gera novos commits e descarta os antigos, fazendo com que eles também se tornem inacessíveis.

Período de carência e reflogs

O Git mantém um registro de atualizações de dicas de ramificação e outras referências chamadas reflogs (registros de referência). Você pode visualizá-lo usando o comando git reflog.

Mesmo que um objeto seja inacessível, se ainda estiver no reflog, ele não será excluído por git prune.

Por padrão, o reflog tem uma data de expiração de 90 dias, fornecendo um período de carência durante o qual os objetos inacessíveis são armazenados temporariamente e não são imediatamente eliminados.

Quando usar git prune

Em geral, não precisamos usar o git prune diretamente. O Git tem um mecanismo de coleta de lixo que é executado automaticamente após alguns comandos para limpar arquivos desnecessários e otimizar a eficiência do repositório local, compactando alguns arquivos.

No entanto, talvez você queira limpar o repositório manualmente, por exemplo:

  • Depois de realizarmos uma operação que sabemos que criará objetos inacessíveis, como a exclusão de uma ramificação. 
  • Queremos limpar o espaço em disco imediatamente.
  • Manter o repositório arrumado e limpo o tempo todo.

Coleta de lixo com git gc

Em vez da poda direta, geralmente é recomendável contar com o mecanismo de coleta de lixo, que não só executa um git prune, mas também otimiza o espaço compactando os objetos.

Conforme mencionado acima, a coleta de lixo será executada automaticamente após alguns comandos. Podemos chamar a coleta de lixo manualmente com o comando:

git gc

Como usar git prune

Como o git prune excluirá os dados, é recomendável que você o execute usando a opção --dry-run primeiro.

git prune --dry-run

Essa opção listará os objetos que seriam podados sem realmente podá-los. O resultado seria algo parecido com:

0d7dff8258654c03a058987b3e63c86feca9200d commit
ea1380f52f0bfa0142e46767adfd56593681091a blob
fa91af78a1ab453c1d7632192b3ca8bf217ec711 commit

A saída indica que há dois commits e uma bolha que não podem ser acessados e que seriam excluídos. Depois de nos certificarmos de que nenhum dado importante está listado, podemos prosseguir com a limpeza:

git prune

Em algumas situações, queremos limpar o repositório logo após realizar uma ação que sabemos que levará a objetos inacessíveis, como a exclusão de um branch. Podemos executar o site git prune --dry-run, mas a saída é vazia. O motivo disso é que os commits excluídos ainda são referenciados no reflog.

Se não quisermos esperar que eles expirem com o reflog, podemos expirá-los manualmente usando o comando:

git reflog expire --expire-unreachable=now --all

Vamos detalhar as opções que usamos:

  • A opção --expire-unreachable=now define a data de expiração de todos os objetos inacessíveis como agora, expirando-os imediatamente.
  • A opção --all tem como alvo todas as entradas de reflog no repositório. Sem essa opção, teríamos que especificar uma determinada referência (como um ramo ou uma tag) na qual queremos operar.

git prune: Uso avançado

Vamos dar uma olhada em algumas técnicas avançadas, como a especificação de um tempo de expiração ou a poda de arquivos compactados.

Especificação de um tempo de expiração

Talvez você queira limpar apenas os objetos mais antigos e inacessíveis, por exemplo, podando apenas os objetos que tenham pelo menos duas semanas.

A opção --expire nos permite especificar um horário de corte. O Git removerá os objetos que não puderem ser acessados por mais de um tempo especificado. O parâmetro aceita diferentes formatos, como "2 semanas atrás", "3 dias", "ontem" etc., para oferecer flexibilidade na especificação do período de expiração.

Exemplo de comando:

git prune --expire=2.weeks.ago

Poda de arquivos compactados

O Git armazena objetos de duas maneiras principais: como arquivos individuais (objetos soltos) e em arquivos compactados. O empacotamento é um mecanismo para economizar espaço e melhorar o desempenho, armazenando vários objetos em um único arquivo e removendo a redundância.

Ocasionalmente, um objeto pode existir tanto na forma solta quanto embalada. Embora essa redundância não seja prejudicial (além de ocupar um pouco mais de espaço em disco), talvez você queira limpar esses objetos soltos que também estão empacotados para recuperar espaço.

O comando git prune-packed remove objetos soltos se eles já estiverem incluídos em um pacote. Ao contrário de git prune, git prune-packed não aceita nenhuma opção, como --expire . Ele simplesmente limpa os objetos soltos que já foram embalados.

Conclusão

À medida que usamos um repositório, alguns objetos se tornarão inacessíveis, causando uso desnecessário do disco. O Git gerencia isso usando um sistema de coleta de lixo que exclui objetos inacessíveis após algum tempo de inatividade.

O mecanismo de coleta de lixo é executado automaticamente pelo Git após alguns comandos. Mas também podemos executá-lo manualmente usando o comando git gc. O processo de coleta de lixo não apenas removerá objetos inacessíveis usando git prune, mas também otimizará o espaço em disco compactando alguns objetos.

Os usuários avançados do Git podem querer manter manualmente um repositório limpo. O comando git prune permite a exclusão manual de objetos inacessíveis. Você deve sempre executar git prune --dry-run antes de executar git prune para ter uma visão geral dos objetos a serem excluídos durante o processo de poda.

Temas

Aprenda controle de versão com estes cursos!

Course

Introduction to Git

4 hr
39.3K
Familiarize yourself with Git for version control. Explore how to track, compare, modify, and revert files, as well as collaborate with colleagues using Git.
See DetailsRight Arrow
Start Course
Ver maisRight Arrow
Relacionado
Git

blog

O que é Git? Manual completo do Git

Saiba mais sobre o sistema de controle de versão mais conhecido e por que é uma ferramenta de colaboração indispensável para cientistas de dados e programadores.
Summer Worsley's photo

Summer Worsley

14 min

blog

O que é o Data Wrangling? Um guia prático com exemplos

Aprenda os conceitos e as teorias fundamentais por trás da organização de dados, além de alguns exemplos práticos. Use essas habilidades em seu trabalho diário de ciência de dados para gerar dados limpos e úteis para seus modelos.
Tim Lu's photo

Tim Lu

12 min

tutorial

Git Rename Branch: Como renomear uma filial local ou remota

Saiba como renomear ramificações locais e remotas do Git usando o terminal ou a interface gráfica do usuário (GUI) de clientes populares como o GitHub.
François Aubry's photo

François Aubry

tutorial

Git Pull Force: Como substituir uma ramificação local por uma remota

Saiba por que o git pull --force não é a melhor maneira de substituir uma ramificação local pela versão remota e descubra o método adequado usando git fetch e git reset.
François Aubry's photo

François Aubry

tutorial

Tutorial de push e pull do GIT

Saiba como realizar solicitações Git PUSH e PULL por meio do GitHub Desktop e da linha de comando.

Olivia Smith

13 min

tutorial

Tutorial do GitHub e do Git para iniciantes

Um tutorial para iniciantes que demonstra como funciona o controle de versão do Git e por que ele é crucial para projetos de ciência de dados.
Abid Ali Awan's photo

Abid Ali Awan

17 min

See MoreSee More