Respostas:
Um objeto (blobs, árvores e confirmações) com o SHA diz - 810cae53e0f622d6804f063c04a83dbc3a11b7ca será armazenado em
.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca
(a divisão nos dois primeiros caracteres para melhorar o desempenho do sistema de arquivos, pois agora nem todos os objetos estão armazenados no mesmo diretório)
Os objetos armazenados como acima são chamados de objetos soltos.
Quando você inicia o seu repo, geralmente tem objetos soltos. À medida que o número aumenta, ele se torna ineficiente e eles são armazenados em um arquivo de pacote. Esses objetos são chamados de objetos compactados.
git gc
é o que você executa para empacotar objetos (geralmente objetos soltos que não são necessários e com poucas semanas de idade também são removidos e com a --prune=<date>opção você pode forçar a remoção de objetos soltos que não são mais necessários. Como quando você altera um commit. O antigo objeto de commit não é mais necessário.)
--pruneopção é ativada por padrão e, como git gcé acionada automaticamente pelo uso comum (por exemplo commit), você normalmente não precisa se preocupar com isso. Eu não uso o git gui e não consigo encontrar exatamente onde é acionado na fonte, mas ele faz sua própria verificação ou apenas intercepta o gcacionado por um comando chamado. Certamente, não há nada com que se preocupar, apenas causado pelo uso normal.
git gcmanual? Eu acho que deveria melhorar, porque objetos soltos são ineficientes e 50.000 é um número muito grande. Também descobri que a embalagem reduz bastante o espaço usado pela .gitpasta.
O Git Book explica muito bem: https://git-scm.com/book/en/v2/Git-Internals-Packfiles
Objetos soltos são o formato mais simples. São simplesmente os dados compactados armazenados em um único arquivo no disco. Todo objeto gravado em um arquivo separado.
git gcpara você, com uma boa barra de progresso da GUI (embora mostrada como travada na maioria das vezes).