Eu não sei todos os detalhes, até porque é detalhe de implementação e eles podem mudar de uma versão para outra.
Mas enfim, sei que alguns comandos (como git fetch
, git rebase
, git commit
, entre outros) chamam git gc --auto
"por baixo dos panos". E este comando, segundo a documentação, verifica o valor de gc.auto
(que inclusive pode ser alterado com git config
) para decidir o que fazer.
Basicamente, quando a quantidade de objetos soltos (loose objects) excede o valor de gc.auto
, é feito o packing (na verdade, a documentação diz que "When there are approximately more than this", mas não deixa claro o que é esse "aproximadamente"). A versão atual (2.40.0) diz que o valor default é 6700, mas como eu já disse, isso é detalhe de implementação e pode mudar sem aviso em versões futuras.
Não achei mais detalhes, então provavelmente o jeito é ver o código fonte :-)