web-dev-qa-db-fra.com

Toute l'équipe reçoit «trop de messages d'objets inaccessibles»

Il n'y a pas longtemps, nous sommes passés de SVN à Git.

Il y a quelques jours, j'ai réalisé que toute notre équipe reçoit ces messages lorsqu'elle pousse:

$ git Push
Counting objects: 32, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (32/32), 2.94 KiB | 0 bytes/s, done.
Total 32 (delta 14), reused 0 (delta 0)
error: The last gc run reported the following. Please correct the root cause
and remove gc.log.
Automatic cleanup will not be performed until the file is removed.

warning: There are too many unreachable loose objects; run 'git Prune' to remove them.

To [email protected]:root/xxx.git
   15c3bbb..69e6d8b  xxxx -> xxx

Je pensais que cela venait de mon ordinateur pendant un certain temps, jusqu'à ce que je réalise que tout le monde a les mêmes problèmes.

Inutile de dire qu'il n'y a pas de gc.log dans mon dossier .git, et utiliser 'git gc' ou 'git Prune' n'a aucun effet.

Ma question est donc la suivante: se pourrait-il que le référentiel hébergé sur le serveur ne soit en quelque sorte pas propre? Si oui, comment le nettoyer?

Toutes les solutions que j'ai trouvées jusqu'à présent concernent des copies locales de référentiels.

De plus, nous utilisons Gitlab pour héberger nos dépôts.

EDIT: Il vaut la peine de dire que depuis que j'ai posté cette question, j'ai également essayé de "nettoyer" le référentiel en utilisant Gitlab mais sans résultat jusqu'à présent.

Merci

23
jlengrand

Ceci est suivi par problème 14357 (GitLab 8.6- ou moins)

La correction manuelle était:

  • SSH dans worker1
  • cd dans le répertoire gitlab-org/gitlab-ce
  • a couru rm gc.log, cela contenait simplement la ligne "avertissement: il y a trop d'objets libres inaccessibles; exécutez 'git Prune' pour les supprimer."
  • a couru git Prune et a prié pour que cela ne brise pas les choses (ce qui, heureusement, ne l'a pas fait)

Mais cela ressemble à, en démarrant GitLab 8.7, le gc automatique est désactivé .
Cela se fait également dans le contexte de (toujours ouvert) problème 13524 :

Généralement, après un rebasage, une modification ou une autre action qui nécessite une poussée de force, nous pouvons avoir des commissions suspendues.

De tels commits "déréférencés" se perdent en raison de git gc qui peut être exécuté en interne ou en utilisant les fonctionnalités GitLab Housekeeping.

S'il arrive qu'une discussion soit attachée à un commit spécifique - elle n'est pas disponible après que le commit déréférencé a été récupéré.

Les validations sont enregistrées dans les événements Push et sont disponibles via des notes système ajoutées à la demande de fusion, ce qui génère actuellement l'erreur 500 dans GitLab.

Mise à jour: ce problème a été clos un mois plus tard (juillet 2016) avec:

  • MR 5062 : Ne pas effectuer de commits de collecte de déchets qui ont des enregistrements de base de données associés comme des commentaires

S'assure qu'un commit est conservé lors de l'exécution de la récupération de place Git.
Git GC supprimera les validations du référentiel qui ne se trouvent plus dans aucune branche ou balise, mais nous souhaitons conserver certaines de ces validations, par exemple si elles contiennent des commentaires ou des constructions de CI.

  • MR 4101 : Refactor: Convertir les références de diff existantes basées sur un tableau en modèle DiffRefs
20
VonC