Atualização: git prune
"resolveria" o problema, pois removeria esses objetos soltos
( git gc
chamadas git prune
, mas apenas para objetos soltos com mais de duas semanas, por padrão).
No entanto, como o OP Michael Donohue menciona nos comentários:
Eu gosto do aspecto de segurança de manter os objetos soltos por duas semanas, caso eu queira voltar e examinar algumas revisões antigas, para que eu realmente não goste desta solução.
Não estou tendo nenhum problema com o tamanho ou o desempenho do git, é apenas o 'git gui' que insiste em me pedir para compactar o banco de dados, mesmo quando compactá-lo não teria efeito.
Resposta original:
O problema de " git gc
" não remover todos os objetos soltos já foi relatado antes (no final de 2008, " " git gc
"parece não remover mais objetos soltos "
git gc
remove apenas objetos soltos com mais de duas semanas. Se você realmente deseja removê-los agora, execute git prune.
Mas certifique-se de que nenhum outro processo git possa estar ativo quando você o executar, ou ele poderá pisar em alguma coisa.
" git gc
" descompactará objetos que se tornaram inacessíveis e estavam atualmente em pacotes.
Como resultado, a quantidade de espaço em disco usada por um repositório git pode realmente aumentar drasticamente após uma " git gc
" operação, o que pode ser surpreendente para alguém que está executando quase completamente em seu sistema de arquivos, exclui várias ramificações de um repositório de rastreamento , e então " git gc
" pode receber uma surpresa muito desagradável.
[
Exemplo: ]
ramificações antigas são reservadas por meio de uma tag como next-20081204
.
Se você atualizar sua cópia local do linux-next
repositório todos os dias, acumulará um grande número dessas tags de ramificação antigas.
Se você excluir uma série inteira e executar git-gc
, a operação levará um bom tempo e o número de blocos e inodes usados crescerá significativamente.
Eles desaparecerão após um " git prune
", mas quando eu faço essa operação de limpeza, muitas vezes desejei uma --yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repository
opção para "git gc".
Então, no seu caso, um " git prune
" seria útil?
(possivelmente usando "now" na gc.pruneexpire
variável de configuração, necessária para que o comportamento acima ocorra).
Você também tem (do mesmo segmento):
repack -a -d -l
Observe a letra minúscula 'a'.
git-gc
chama reembalar com 'A' maiúsculo, que é o que faz com que os objetos inacessíveis sejam descompactados. O pequeno 'a' é para pessoas que sabem o que estão fazendo e querem que o git simplesmente solte objetos inacessíveis.