À quelle fréquence devez-vous utiliser git-gc?
La page de manuel dit simplement:
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 de fonctionnement.
Existe-t-il des commandes pour obtenir le nombre d'objets pour savoir s'il est temps de passer au GC?
gc.autodetach
(Git 2.0 Q2 2014) peut aider à fonctionnergit gc --auto
sans bloquer l'utilisateur. voir ma réponse ci-dessous .Réponses:
Cela dépend principalement de la quantité d'utilisation du référentiel. Avec un utilisateur qui s'enregistre une fois par jour et une opération de branchement / fusion / etc une fois par semaine, vous n'avez probablement pas besoin de l'exécuter plus d'une fois par an.
Avec plusieurs dizaines de développeurs travaillant sur plusieurs dizaines de projets, chacun s'enregistrant 2 à 3 fois par jour, vous voudrez peut-être l'exécuter tous les soirs.
Cependant, cela ne fera pas de mal de l'exécuter plus fréquemment que nécessaire.
Ce que je ferais, c'est l'exécuter maintenant, puis dans une semaine, prendre une mesure de l'utilisation du disque, l'exécuter à nouveau et mesurer à nouveau l'utilisation du disque. S'il diminue de 5%, exécutez-le une fois par semaine. S'il baisse davantage, exécutez-le plus fréquemment. S'il baisse moins, exécutez-le moins fréquemment.
la source
Notez que l'inconvénient de la collecte des déchets de votre référentiel est que les déchets sont collectés. Comme nous le savons tous en tant qu'utilisateurs d'ordinateurs, les fichiers que nous considérons actuellement comme des déchets pourraient s'avérer très précieux trois jours à l'avenir. Le fait que git garde la plupart de ses débris a sauvé mon bacon plusieurs fois - en parcourant tous les commits pendantes, j'ai récupéré beaucoup de travail que j'avais accidentellement mis en conserve.
Alors ne soyez pas trop un monstre soigné dans vos clones privés. Il n'y en a guère besoin.
OTOH, la valeur de la récupérabilité des données est discutable pour les repos utilisés principalement comme télécommandes, par exemple. l'endroit où tous les développeurs poussent et / ou se retirent. Là, il pourrait être judicieux de lancer fréquemment un cycle GC et un reconditionnement.
la source
git gc --help
, en particulier l'--prune
option). Il est également fait mention degc.reflogExpire
, ce qui m'amène à croire que tout engagement que vous avez visité au cours des 90 derniers jours ne sera pas collecté. (Ma version git: v1.7.6)Les versions récentes de git exécutent automatiquement gc lorsque cela est nécessaire, vous ne devriez donc rien avoir à faire. Voir la section Options de man git-gc (1) : "Certaines commandes git exécutent git gc --auto après avoir effectué des opérations qui pourraient créer de nombreux objets lâches."
la source
gc --auto
, je suppose.Si vous utilisez Git-Gui , il vous indique quand vous devez vous inquiéter:
La commande suivante apportera un nombre similaire:
Sauf que, depuis sa source , git-gui fera le calcul lui-même, comptant réellement quelque chose dans le
.git/objects
dossier et apportant probablement une approximation (je ne saistcl
pas lire correctement cela!).En tout cas, il semble donner l'avertissement sur la base d'un nombre arbitraire d' environ 300 objets en vrac.
la source
Git-Gui
etcount-objects
ne sont pas exactement de bonnes réponses à la question ici ... Mais ils devraient l'être!Déposez-le dans un travail cron qui s'exécute tous les soirs (après-midi?) Lorsque vous dormez.
la source
J'utilise git gc après avoir effectué une grosse commande, et j'ai beaucoup de nouveaux objets. cela peut économiser de l'espace. Par exemple, si vous extrayez un gros projet SVN à l'aide de git-svn et effectuez un git gc, vous économisez généralement beaucoup d'espace
la source
Vous pouvez le faire sans aucune interruption, avec le nouveau paramètre (Git 2.0 Q2 2014)
gc.autodetach
.Voir commit 4c4ac4d et commit 9f673f9 ( Nguyễn Thái Ngọc Duy, alias pclouds ):
Depuis cette version 2.0, il y avait cependant un bug: git 2.7 (Q4 2015) s'assurera de ne pas perdre le message d'erreur .
Voir commit 329e6e8 (19 sept. 2015) de Nguyễn Thái Ngọc Duy (
pclouds
) .(Fusionné par Junio C Hamano -
gitster
- en commit 076c827 , 15 oct.2015 )la source
Cette citation est tirée de; Contrôle de version avec Git
la source
git commit --amend
). Cela peut être vérifié avecgit log --reflog
. J'ai poussé une branche vers le référentiel distant et vérifié à nouveau mon arborescence; les commits inaccessibles étaient toujours là. Apparemment, ilgit gc
n'a pas été exécuté lorsque cette poussée s'est produite. …?J'utilise quand je fais un gros commit, surtout quand je supprime plus de fichiers du référentiel .. après, les commits sont plus rapides
la source
Vous n'avez pas besoin de l'utiliser
git gc
très souvent, cargit gc
(Garbage collection) est exécuté automatiquement sur plusieurs commandes fréquemment utilisées:Source: meilleures pratiques git gc et FAQ
la source