Quels sont les «objets en vrac» auxquels se réfère l'interface graphique Git?
219
Lorsque j'ouvre l' interface graphique Git , j'obtiens un message contextuel qui fait référence à loose objects. Je l'ai fait git gcet cela a supprimé le message.
Que sont loose objectset comment pourrais-je empêcher que cela se reproduise?
Vous pouvez simplement cliquer sur "Oui" dans le message contextuel lorsqu'il vous demande si les objets en vrac doivent être emballés maintenant. Git GUI fonctionnera git gcpour vous, avec une belle barre de progression GUI (bien qu'elle soit affichée comme bloquée la plupart du temps).
ADTC
Réponses:
144
Un objet (blobs, arbres et validations) avec SHA, dit - 810cae53e0f622d6804f063c04a83dbc3a11b7ca sera stocké dans
(la division en deux premiers caractères pour améliorer les performances du système de fichiers car maintenant tous les objets ne sont pas stockés dans le même répertoire)
Les objets stockés comme ci-dessus sont appelés objets lâches.
Lorsque vous démarrez avec votre repo, vous avez surtout des objets en vrac. Lorsque le nombre augmente, il devient inefficace et ils sont stockés dans un fichier pack. Ces objets sont appelés objets emballés.
git gc
est ce que vous exécutez pour emballer les objets (les objets généralement non utilisés qui ne sont pas nécessaires et qui datent de quelques semaines sont également supprimés et avec l' --prune=<date>option, vous pouvez forcer la suppression des objets non utilisés qui ne sont plus nécessaires. Comme lorsque vous modifiez un commit. L'ancien objet commit n'est pas plus nécessaire.)
L' --pruneoption est activée par défaut, et comme elle git gcest automatiquement déclenchée par une utilisation courante (par exemple commit), vous n'avez généralement pas à vous en soucier. Je n'utilise pas git gui, et je ne peux pas trouver exactement où il est déclenché dans la source, mais soit il effectue sa propre vérification, soit intercepte simplement le gcdéclenché par une commande appelée. Ce n'est certainement rien à craindre, juste causé par une utilisation normale.
Cascabel
21
Y a-t-il un inconvénient à emballer des objets en vrac? Sinon, pourquoi Git ne le fait-il pas automatiquement?
Louis Rhys
13
Je ne pense pas qu'il soit vrai que cela se produit automatiquement. Je m'engage souvent mais `` git gui '' mentionné avait 50 000 objets en vrac (et je me demandais pourquoi git était si lent, grand projet sur ~ 4 ans sans GC manuel)
Kevin
1
@Kevin Les performances de votre grand projet se sont-elles améliorées après une exécution git gcmanuelle? Je pense que cela devrait s'améliorer, car les objets en vrac sont inefficaces, et 50 000 est un très grand nombre. J'ai également découvert que l'emballage réduit également considérablement l'espace utilisé par le .gitdossier.
ADTC
3
@LouisRhys, "Lorsque les objets sont écrits sur le disque, c'est souvent au format lâche, car ce format est moins cher à accéder. Cependant, vous voudrez éventuellement économiser de l'espace en emballant les objets" - de Git Book lien dans la réponse ci
Les objets en vrac sont le format le plus simple. Il s'agit simplement des données compressées stockées dans un seul fichier sur le disque. Chaque objet écrit dans un fichier séparé.
git gc
pour vous, avec une belle barre de progression GUI (bien qu'elle soit affichée comme bloquée la plupart du temps).Réponses:
Un objet (blobs, arbres et validations) avec SHA, dit - 810cae53e0f622d6804f063c04a83dbc3a11b7ca sera stocké dans
(la division en deux premiers caractères pour améliorer les performances du système de fichiers car maintenant tous les objets ne sont pas stockés dans le même répertoire)
Les objets stockés comme ci-dessus sont appelés objets lâches.
Lorsque vous démarrez avec votre repo, vous avez surtout des objets en vrac. Lorsque le nombre augmente, il devient inefficace et ils sont stockés dans un fichier pack. Ces objets sont appelés objets emballés.
est ce que vous exécutez pour emballer les objets (les objets généralement non utilisés qui ne sont pas nécessaires et qui datent de quelques semaines sont également supprimés et avec l'
--prune=<date>
option, vous pouvez forcer la suppression des objets non utilisés qui ne sont plus nécessaires. Comme lorsque vous modifiez un commit. L'ancien objet commit n'est pas plus nécessaire.)la source
--prune
option est activée par défaut, et comme ellegit gc
est automatiquement déclenchée par une utilisation courante (par exemplecommit
), vous n'avez généralement pas à vous en soucier. Je n'utilise pas git gui, et je ne peux pas trouver exactement où il est déclenché dans la source, mais soit il effectue sa propre vérification, soit intercepte simplement legc
déclenché par une commande appelée. Ce n'est certainement rien à craindre, juste causé par une utilisation normale.git gc
manuelle? Je pense que cela devrait s'améliorer, car les objets en vrac sont inefficaces, et 50 000 est un très grand nombre. J'ai également découvert que l'emballage réduit également considérablement l'espace utilisé par le.git
dossier.Le Git Book l'explique assez bien: https://git-scm.com/book/en/v2/Git-Internals-Packfiles
la source