Re: How to recovery a corrupted git repo
- From
Matthieu Moy <matthieu.moy@grenoble-inp.fr>
- Date
- Feb 21, 2011, 14:51 UTC
- Message-ID
- <vpqpqql1lw6.fsf@bauges.imag.fr>
- In-Reply-To
- <20110221100454.GM22168@axel>
Axel Freyn <axel-freyn@gmx.de> writes:
Show 16 quoted lines
> I don't know whether there is a single git command to do it, but you can > copy those 5 objects "by hand": in your backup, you should have a > directory .git/objects, where you have the files > b7/1eb55f2dbc97dafd4a769fc61f346e69a5e0af > 28/2035f3ae964e1e288f352c370be8edd11d3078 > 3c/20f556eecc476e3542cc522d46a62a4461fec6 > f3/21b578edeb452358497e832815d6cae6b36886 > 6d/23f5084c975be637f7d748db82116bf84d3872 > > It should be sufficient to just copy those files into the corrupted > repo. > > However if you packed the git-files in the backup (e.g. by running "git > gc"), those objects might be found in a pack in .git/objects/pack. > The easiest ist probably to use git-unpack-objects to unpack the > objects, and then copy the 5 missing objects.
There's also the brute-force approach
rsync $good_repo/.git/objects/ $bad_repo/.git/objects/ cd $bad_repo git gc
Notice the absence of --delete in the rsync command: I'm just adding new files in the $bad_repo, not deleting any (since files with identical names must have identical content).
This will result in a lot of duplicates (objects found in several packs), but "git gc" should be able to remove them.
(the notice about doing backups before also applies to my proposal ;-) )
-- Matthieu Moy http://www-verimag.imag.fr/~moy/