Comment réparer un repo local Git ?
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 !