Quais são os "objetos soltos" aos quais a GUI do Git se refere?


219

Quando abro a GUI do Git , recebo uma mensagem pop-up referente a loose objects. Eu fiz git gce isso removeu a mensagem.

O que são loose objectse como posso impedir que isso ocorra novamente?


Você pode simplesmente clicar em "Sim" na mensagem pop-up quando perguntar se os objetos soltos devem ser compactados agora. A GUI do Git será executada git gcpara você, com uma boa barra de progresso da GUI (embora mostrada como travada na maioria das vezes).
— ADTC

Respostas:


144

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.)


3
A --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.
— Cascabel

21
existe alguma desvantagem em embalar objetos soltos? Caso contrário, por que o Git não faz isso automaticamente?
— Louis Rhys

13
Não acho que isso aconteça automaticamente. I cometer muitas vezes, mas 'git gui' mencionado teve 50.000 objetos soltos (e têm sido perguntando por que git estava tão lento, grande projeto mais ~ 4 anos sem gc manual)
— Kevin

1
@Kevin O desempenho do seu grande projeto melhorou após a execução 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.
— ADTC

3
@LouisRhys, "Quando os objetos são gravados em disco, geralmente eles estão no formato livre, pois esse formato é mais barato de acessar. No entanto, eventualmente, você deseja economizar espaço ao empacotar os objetos" - do Git Book link na resposta abaixo
— chris

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.