Comment réparer un repo local Git ?

Développement web mars 24, 2020

J'ai récemment été confronté à un problème sur un repo local Git.

Dans un composer.json, il y avait une dépendance vers un repo Git privé sous Gitlab. Lorsque je passais la commande composer install, j'obtenais une exception.

[RuntimeException]Failed to execute git checkout '6a9191a6eefe3dabd4cc2fff49d28b3477082286' -- && git reset --hard '6a9191a6eefe3dabd4cc2fff49d28b3477082286' --fatal: failed to read object 6a9191a6eefe3dabd4cc2fff49d28b3477082286: Operation not permitted

Le git fsck m'indiquait que le repo était corrompu :

bash-5.0# git fsck --full
Checking object directories: 100% (256/256), done.
error: packfile .git/objects/pack/pack-84abd7b597860a47c47a0fb17cdd22866d64dd2d.pack index not opened
fatal: failed to read object c3497b2a0f8eb0a6f805be44b96041c292f2e16c: Operation not permitted

Après plusieurs tentatives de résolution sans succès, j'ai fini par trouver une solution simple. S'agissant d'un repo Git local, je connais l'url du repo distant. Ces commandes devraient vous aider.

mv -v .git .git_old &&            # On retire le dossier .git
git init &&                       # On initialise un nouveau repo local
git remote add origin "<url>" &&  # On le connecte sur le repo distant
git fetch &&                      # On recup les sources
git reset origin/master --mixed   # On force la mise a jour avec nos sources locales 

That's it !

Kevin Marie

Développeur depuis 20 ans, j'ai aussi de riches experiences dans différents domaines. Chef de projet ou bien Tech Lead pour une startup internationale, j'aspire toujours à avancer avec passion.