Re: Recovering from repository corruption
- From
Denis Bueno <dbueno@gmail.com>
- Date
- Jun 10, 2008, 19:38 UTC
- Message-ID
- <6dbd4d000806101238v2bb975abqd39916e45d4bf866@mail.gmail.com>
- In-Reply-To
- <m3abhtp42o.fsf@localhost.localdomain>
On Tue, Jun 10, 2008 at 13:55, Jakub Narebski <jnareb@gmail.com> wrote:
Show 41 quoted lines
> Assume that history looks like this > > ...---.---a---*---b---.---... > > where by '*' is marked corruped commit (commit shich tree contains > corrupted blobs). > > First, you can check the commit message for '*' using git-cat-file or > git-show, you can get the difference between 'a' and 'b' using > "git diff a b". When you know how repaired commit 'X' should look > like, do something like: > > $ git checkout -b <temp-branch> 'a' > $ <edit edit edit> > $ git commit > > Then history would look like this > > ...---.---a---*---b---.---... > \ > \-X > > Now with grafts make 'b' be a child of 'X', i.e. modify parent of 'b' > for history to look like below: > > ...---.---a---* b---.---... > \ / > \-X-/ > > Examine history using git-log, git-show, check tree with git-ls-tree > and examining files, use graphical history browser like gitk. > > Then if possible use git-filter-branch to make history recorded in > grafts file permanent... > > HTH > -- > Jakub Narebski > Poland > ShadeHawk on #git >
Thanks for the help.
My situation was:
...---a---*---b---c---d---*---e---...
Following your example, I believe I got this to:
...---a---* b---c---d---* e---...
\ / \ /
\-X-/ \---/That is, I replaced the first problematic commit and deleted the second, since I forgot how I changed 'd' to get that commit. I put the following in .git/info/grafts:
'b' X
'e' 'd'(which I gathered from here: http://thread.gmane.org/gmane.comp.version-control.git/66398/focus=66402. I've never use grafts before. A bit about them should be put in the manual, if it's not there already. =])
Then I ran:
git-filter-branch HEAD ^X ^'d'
Now "git log --raw --all" doesn't show any of the problematic SHA-1 hashes anymore!
However:
identity.fb[173] > git fsck --full
error: 320bd6e82267b71dd2ca7043ea3f61dbbca16109: object corrupt or missing
error: 4d0be2816d5eea5ae2b40990235e2225c1715927: object corrupt or missing
missing blob 320bd6e82267b71dd2ca7043ea3f61dbbca16109
missing blob 4d0be2816d5eea5ae2b40990235e2225c1715927Shouldn't these be unreferenced now that I've run filter-branch?
--
Denis