Git Gui: Perpetuamente obtendo “Este repositório atualmente tem aproximadamente 320 objetos soltos.”

90

Toda vez que eu inicio o Git Gui em um projeto específico, recebo esta mensagem:

Este repositório atualmente possui aproximadamente 320 objetos soltos.

insira a descrição da imagem aqui

Em seguida, clico em Sim e obtenho esta caixa de diálogo:

insira a descrição da imagem aqui

O fato é que, quando abro o Git Gui novamente, recebo exatamente a mesma mensagem , novamente cerca de 320 objetos soltos! É como se clicar em Sim não tivesse nenhum efeito.

sashoalm
fonte
Você pode postar a saída de git count-objects -v?
CB Bailey
possível duplicata de How to skip "Loose Object" popup ao executar 'git gui'
TheCodeArtist
5
@TheCodeArtist Obrigado, encontrei a resposta aí. Executar git gcexplicitamente a partir da linha de comando funcionou para mim, de acordo com este comentário .
sashoalm

Respostas:

82

Simplesmente pular o pop-up, como Como pular o pop-up "Objeto Solto" ao executar 'git gui', sugere na resposta aceita está negligenciando o fato de que o Git está comunicando um possível problema de desempenho para você. Isso deve ser corrigido executando este comando na linha de comando:

cd path/to/your/git/repo
git gc --aggressive

Do resultado de git help gc:

Executa uma série de tarefas de manutenção dentro do repositório atual, como compactar revisões de arquivo (para reduzir o espaço em disco e aumentar o desempenho) e remover objetos inacessíveis que podem ter sido criados a partir de invocações anteriores de git add.

Os usuários são incentivados a executar essa tarefa regularmente em cada repositório para manter uma boa utilização do espaço em disco e um bom desempenho operacional.

--agressivo

Normalmente git gc é executado muito rapidamente enquanto fornece boa utilização de espaço em disco e desempenho. Esta opção fará com que o git gc otimize de forma mais agressiva o repositório ao custo de levar muito mais tempo. Os efeitos dessa otimização são persistentes, portanto, essa opção só precisa ser usada ocasionalmente; a cada poucas centenas de changesets ou assim.

Isso deve evitar que o prompt apareça por um tempo.

Greg Burghardt
fonte
19
O que é estranho é que simplesmente executar a git gcpartir da linha de comando consertou para mim. Pode ser git guiexecutado algo como git gc --extra-unaggressive:)
sashoalm
38
git pruneparece consertar quando git gcnão.
Mahn
1
Você geralmente não quer correr --aggressive; que faz gitcom que os deltas sejam recalculados, o que geralmente é improdutivo e muito demorado; veja esta postagem - a manpágina é enganosa. Provavelmente, simplesmente git gcé suficiente neste caso.
Jeff Clites
16
Tive que usar --prune=allpara se livrar da mensagem. Nem git gcna linha de comando nem nas opções --aggressiveou --prunefuncionou.
daw
1
@JeffClites O artigo ao qual você se refere tem (nesta data) 11 anos de idade e afirma "Por esta razão --aggressive provavelmente será removido das páginas de manual e deixado como um recurso não documentado por um tempo.". Sem cavar mais, parece estranho que a mensagem quebrada ainda esteja lá. Existe uma chance de que o comportamento tenha sido modificado desde que o artigo foi escrito?
tubo
3

Eu uso o comando:

git gc --prune = now

e não há mais muitos avisos de objeto solto após terminar.

fonte de referência: https://git-scm.com/docs/git-gc

AdvenC
fonte
1
Devo dizer que essa foi a solução que funcionou para mim. Estranhamente, git gc --aggressivenão removeu o aviso (e nem o fez clicando na IU, que parece realizar um simples git gc).
saeraphin