Fixing broken git repositorie

Ko sem želel potegniti zadnje spremembe iz svojega git repozitorija me je pričakalo neljubo obvestilo:

> git fetch
error: Unable to find e266962d208fad4178519d1139b37cfe7d2681f3 under http://mygitrepositorie/
Cannot obtain needed commit e266962d208fad4178519d1139b37cfe7d2681f3
while processing commit d0c 523e7f64b6694ced9a0f8c1d3ba90991c9d86.
error: Fetch failed.

Očitno zadnji commit (ali predzadnji) ni bil izveden ok. Kaj sedaj?

Valda nisem prvi s to napako. In search po internetu pokaže da se da marsikaj popraviti z git gc (garbage colector) in git reflog. Vendar je večina imele težave z lokalnim repozitorijem, pri meni je bila pa napaka očitno na serverju. In vse skupaj ni nič pomagalo.

V bistvu je pa rešitev relativno enostavna. Manjkajoči objekt (file) v mojem primeru e266962d208fad4178519d1139b37cfe7d2681f3 je le potrebno pridobiti iz lokalnega repozitorija tistega, ki je ta commit delal, in ga prenesti na strežnik. Pri tem seveda upoštevamo, da prva dva znaka imena pomenita direktorij, ostalo je pa ime fileta. In ko sem ta file skopiral gor, je zadeva znova začelo lepo delati. Res pa sem si z prejšnjimi poiskusi fixanja pobrisal en remote branch, tako da sem še to moral vzpostaviti.

Skratka, tudi git ni ravno imun na težave, atomskosti operacij ni za zaupat 100%. Je pa kar robusten, in izgleda da bo poznavanje njegovih internih struktur potrebno ob nadaljnih težavah.