git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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/
Previous: Ping YinNext: Ping Yin
Message 5 of 8 in “How to recovery a corrupted git repo”
  1. Ping YinFeb 21, 2011
  2. Christian CouderFeb 21, 2011
  3. Axel FreynFeb 21, 2011
  4. Ping YinFeb 21, 2011
  5. Matthieu MoyFeb 21, 2011
  6. Ping YinFeb 21, 2011
  7. Matthieu MoyFeb 21, 2011
  8. Ping YinFeb 22, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.