65 votes

git: pendantes gouttes

J'ai récemment rencontré git fsck --perdu-trouvé sur mon référentiel.

Je m'attendais à voir un couple bancale s'engage, où j'ai dû réinitialiser la TÊTE.

Cependant, j'ai été surpris de voir probablement sur plusieurs milliers de pendre blob messages.

Je ne crois pas que quelque chose est incorrect avec mon référentiel, mais je suis curieux de savoir quelles sont les causes de ces pendantes gouttes? Il n'y a que deux personnes qui travaillent sur le référentiel, et nous n'avons pas fait tout ce qui sort de l'ordinaire.

Je ne pense pas qu'ils ont été créés par une ancienne version d'un fichier est remplacé par un nouveau, depuis git besoin de tenir sur les deux gouttes de sorte qu'il peut afficher l'historique.

Venez pour penser à elle, à un moment, nous en avons ajouté un TRÈS grand répertoire (en milliers de fichiers) pour le projet par erreur, puis l'enlever. Cela pourrait-il être la source de tous les pendantes gouttes?

Il suffit de regarder pour comprendre ce mystère.

56voto

Waynn Lue Points 5743

La dernière fois que j'ai regardé ce que je suis tombé sur ce fil, plus particulièrement, la présente partie:

Vous pouvez également retrouver avec des objets pendants dans les packs. Lorsque ce pack est reconditionnés, ces objets seront desserrés, et puis finalement expiré en vertu de la règle mentionnée ci-dessus. Cependant, je crois que gc ne sera pas toujours repack anciens packs; il va faire de nouveaux packs jusqu'à ce que vous avez beaucoup de packs, et puis de combiner tous (du moins, c'est ce "gc --auto de" on va le faire; je ne me souviens pas que ce soit juste "git gc" suit la même règle).

Donc, c'est un comportement normal, et ne se collectées finalement, je crois.

edit: Par Daniel, vous pouvez reprendre immédiatement en exécutant

git gc --prune="0 days"

27voto

Daniel Points 2619

J'étais vraiment impatient et utilisé:

git gc --prune="0 days"

16voto

knittl Points 64110

Chaque fois que vous add d'un fichier à l'index, le contenu de ce fichier est ajouté à Git de l'objet de base de données comme un blob. Lorsque vous ensuite, reset/rm --cached le fichier, les gouttes continuent d'exister (ils seront nettoyés de la prochaine fois que vous exécutez gc)

Toutefois, lorsque ces fichiers font partie d'un commit et que vous décidez plus tard d' reset l'histoire, puis la vieille commits sont toujours accessibles à partir de Git est reflog et ne sera nettoyée après une période de temps (généralement un mois, iirc). Ces objets ne doivent pas apparaître comme bancales si, puisqu'ils sont encore référencés dans le reflog.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X