web-dev-qa-db-fra.com

Git: qu'est-ce qu'un commit / blob en suspens et d'où viennent-ils?

Je cherche les informations de base sur les commits & blobs pendantes.

Mon repo semble bien. Mais j'ai couru git fsck pour la première fois pour voir ce que cela a fait et j'ai une longue liste de 'blobs en suspens' et un seul 'commit en suspens'.

Quelles sont ces choses? D'où viennent-ils? Est-ce qu'ils indiquent quelque chose d'inhabituel (bon ou mauvais) sur l'état de mon repo?

126
doub1ejack

Au cours de votre travail avec votre référentiel git, il est possible que vous finissiez par annuler vos opérations et que vous effectuiez d'autres actions qui génèrent des blobs intermédiaires, voire certaines actions que git fait pour vous afin d'éviter toute perte d'informations.

Finalement (conditionnellement, selon le page de manuel de git gc ), il effectuera un nettoyage de la mémoire et nettoiera ces informations. Vous pouvez également le forcer en appelant le processus de récupération de place, git gc.

Pour plus d'informations à ce sujet, voir Maintenance et récupération de données sur le site git-scm.

Une exécution manuelle du CPG laissera par défaut 2 semaines avant l'exécution de cette commande d'un filet de sécurité. En fait, il est conseillé de lancer le GC occasionnellement pour assurer une utilisation performante de votre référentiel git. Cependant, comme pour toute chose, vous devez comprendre ce qu’il fait avant de détruire les choses qui peuvent être importantes pour vous.

80
vgoff

Blob en suspens = Un changement qui a été ajouté à la zone/index de transfert, mais n'a jamais été validé. Une chose qui est incroyable avec git, c'est qu'une fois ajouté dans la zone de préparation, vous pouvez toujours le récupérer car ces blobs se comportent comme des commits, en ce sens qu'ils ont aussi un hash !!

Dangling commit = Un commit qui n'est pas directement lié à un commit, une branche, une balise ou une autre référence enfant. Vous pouvez les récupérer aussi!

83
Elijah Lynn

HOWTO supprime tous les commits en attente de votre dépôt git de http://www.tekkie.ro/news/howto-remove-all-dangling-commits-from-your-git-repository/

git reflog expire --expire=now --all
git gc --Prune=now

Assurez-vous de vouloir vraiment les supprimer, car vous pourriez décider de les utiliser après tout.

34
qxo