Git Gui: Obtention perpétuelle de "Ce référentiel contient actuellement environ 320 objets en vrac."

89

Chaque fois que je lance Git Gui sur un projet particulier, je reçois ce message:

Ce référentiel contient actuellement environ 320 objets libres.

entrez la description de l'image ici

Je continue ensuite à cliquer sur Oui , et j'obtiens cette boîte de dialogue:

entrez la description de l'image ici

Le fait est que lorsque j'ouvre à nouveau Git Gui, je reçois exactement le même message , encore une fois environ 320 objets en vrac! C'est comme si cliquer sur Oui n'avait aucun effet.

sashoalm
la source
Pouvez-vous publier la sortie de git count-objects -v?
CB Bailey
5
@TheCodeArtist Merci, j'ai trouvé la réponse là-bas. Exécuter git gcexplicitement à partir de la ligne de commande a fonctionné pour moi, selon ce commentaire .
sashoalm

Réponses:

80

Sauter simplement la fenêtre contextuelle , comme le suggère Comment ignorer la fenêtre contextuelle «Loose Object» lors de l'exécution de 'git gui' dans la réponse acceptée, on oublie le fait que Git vous communique un problème de performance possible. Cela devrait être réparable en exécutant cette commande à partir de la ligne de commande:

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

À partir de la sortie de git help gc:

Exécute un certain nombre de tâches de gestion interne dans le référentiel actuel, telles que la compression des révisions de fichiers (pour réduire l'espace disque et augmenter les performances) et la suppression des objets inaccessibles qui peuvent avoir été créés à partir d'appels précédents de git add.

Les utilisateurs sont encouragés à exécuter cette tâche régulièrement dans chaque référentiel pour maintenir une bonne utilisation de l'espace disque et de bonnes performances d'exploitation.

--agressif

Généralement, git gc s'exécute très rapidement tout en offrant une bonne utilisation de l'espace disque et des performances. Cette option amènera git gc à optimiser plus agressivement le référentiel au prix de prendre beaucoup plus de temps. Les effets de cette optimisation sont persistants, cette option ne doit donc être utilisée qu'occasionnellement; tous les quelques centaines de changesets environ.

Cela devrait empêcher l'invite d'apparaître pendant un certain temps.

Greg Burghardt
la source
19
Ce qui est étrange, c'est que le simple fait de courir à git gcpartir de la ligne de commande a résolu le problème pour moi. Peut-être git guiexécute quelque chose comme git gc --extra-unaggressive:)
sashoalm
38
git prunesemble le réparer quand ce git gcn'est pas le cas.
Mahn
1
Vous ne voulez généralement pas courir avec --aggressive; cela entraîne gitle recalcul des deltas, ce qui est généralement improductif et prend beaucoup de temps; voir ce post - la manpage est trompeuse. Probablement tout simplement git gcsuffit dans ce cas.
Jeff Clites
16
Dû utiliser --prune=allpour se débarrasser du message. Ni git gcsur la ligne de commande ni les options --aggressiveou --prunen'a fait l'affaire.
daw
1
@JeffClites L'article auquel vous faites référence a (à cette date) 11 ans et déclare: "Pour cette raison, l'agressivité sera probablement supprimée des pages de manuel et laissée comme une fonctionnalité non documentée pendant un certain temps.". Sans creuser davantage, il semble étrange que le message brisé soit toujours là. Y a-t-il une chance que le comportement ait été modifié depuis que l'article a été écrit?
pipe
3

J'utilise la commande:

git gc --prune = maintenant

et plus d'avertissement d'objet lâche après avoir terminé.

source de référence: https://git-scm.com/docs/git-gc

AdvenC
la source
1
Je dois dire que c'était la solution qui a fonctionné pour moi. Étrangement, git gc --aggressiven'a pas supprimé l'avertissement (et aucun clic sur l'interface utilisateur, qui semble effectuer un simple git gc).
saeraphin