Version courte: cela veut dire ce qu'elle dit, et si vous la laissez simplement finir, tout ira bien.
Pendant la plupart des opérations qui peuvent potentiellement augmenter le nombre d'objets lâches (décompressés) dans le référentiel (y compris les push), Git invoque git gc --auto
. S'il y a suffisamment d'objets en vrac (par défaut, au moins 6700), il sera alors invoqué git repack -d -l
pour les emballer. S'il y a trop de packs séparés, il les remballera également en un seul.
Un pack est un fichier unique compressé en delta, contenant un grand nombre d'objets. Il est plus efficace de stocker des objets dans des packs, mais cela prend du temps pour emballer (compresser) des objets, donc Git crée initialement des objets en vrac, puis les emballe par lots de temps en temps, via l'appel automatique de git gc --auto
.
Si vous laissez Git terminer le reconditionnement, cela ne se reproduira pas avant un certain temps. Cela peut en effet prendre un certain temps, surtout si vous avez beaucoup de gros objets binaires, mais si cela se déclenche, c'est un signe que cela réduira probablement considérablement la quantité d'espace disque prise par le dépôt. Si vous ne voulez vraiment pas que cela se produise, vous pouvez modifier le paramètre de configuration gc.auto
. Si vous l'augmentez à quelque chose de beaucoup plus grand que 6700, cela se produira moins fréquemment, mais prendra plus de temps quand il le fera. Si vous le diminuez, il devra toujours faire votre remballage actuel, mais par la suite, cela se produira plus souvent et se terminera plus rapidement. Si vous le définissez sur 0, il désactivera le reconditionnement automatique.
Voir man git-gc
(sous --auto
) et man git-config
(sous gc.auto
) pour plus d'informations.
fatal: Out of memory, malloc failed (tried to allocate 79610689 bytes) error: failed to run repack
- c'est ce que j'obtiens en collant l'intégralité de notre base de code dans un seul dépôt git. Je suppose que je vais tuer les applications et forcer le reconditionnement "manuellement"Bien que Jefroni ait raison de dire que parfois l'auto-emballage a juste besoin de temps pour se terminer, si le message d'auto-emballage persiste pendant plusieurs jours comme le décrit OP, il y a de fortes chances que le nettoyage de git manque des objets pendants, comme décrit dans cette question .
Pour voir si des objets suspendus déclenchent des messages en cours sur la compression automatique, essayez de l'exécuter
git fsck
. Si vous obtenez une longue liste de validations pendantes, vous pouvez les nettoyer avecgit gc --prune=now
Je dois généralement exécuter cela sur mon référentiel tous les 2-3 mois lorsque le message d'emballage automatique ne disparaît pas après une seule traction.
la source
git pull
, pendant plusieurs jours, et j'ai enfsck
effet montré une tonne de commits pendantes.Pour désactiver pour un projet:
Pour désactiver globalement:
la source
Git exécute git-repack, qui regroupe de nombreux objets (= fichiers, validations et arborescences) dans un seul fichier pack. Git le fait parfois, lorsqu'une heuristique dit qu'il peut y avoir de l'espace (un fichier pack contient des deltas d'objets compressés, tandis que chaque fichier dans le répertoire objets / contient le contenu complet du fichier compressé)
la source
Espérons que cette
git gc --auto
étape soit désormais plus efficace (git 2.0.1, 25 juin 2014).Voir commit 62aad18 par Nguyễn Thái Ngọc Duy (
pclouds
)gc --auto
: ne pas verrouiller les références en arrière-planEt Git 2.22 (Q2 2019) optimise davantage
git gc
.la source