* Recover broken git repository? @ 2009-07-14 13:20 Florian Breitwieser 2009-07-14 14:40 ` Alex Riesen ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Florian Breitwieser @ 2009-07-14 13:20 UTC (permalink / raw) To: git Hi, I have problems with my git repository, attached below are the steps I tried to resolve it. But now I am stuck. Is there any good way to recover? Thank you Florian -- Florian Breitwieser PhD Student Research Center of Molecular Medicine of the Austrian Academy of Science ------------------- $ git commit -m "Some message" error: invalid object 1086b1c606a04bcb78b92d1d411a299d20d18034 fatal: Error building trees $ git-fsck --full dangling tree c2549a3cdd83098a523cb707f217f4656cde7eb5 $ git prune $ git commit -m "Some message" Created commit e32d5dd: Some message 2 files changed, 167 insertions(+), 10 deletions(-) $ git push Counting objects: 15, done. Compressing objects: 100% (6/6), done. Writing objects: 100% (8/8), 2.44 KiB, done. Total 8 (delta 4), reused 0 (delta 0) Unpacking objects: 100% (8/8), done. fatal: unresolved deltas left after unpacking error: unpack failed: unpacker exited with error code To /mnt/extstore2/bioinformatic/git/ppi.git ! [remote rejected] master -> master (n/a (unpacker error)) error: failed to push some refs to '/mnt/extstore2/bioinformatic/git/ppi.git' -- View this message in context: http://n2.nabble.com/Recover-broken-git-repository--tp3255106p3255106.html Sent from the git mailing list archive at Nabble.com. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Recover broken git repository? 2009-07-14 13:20 Recover broken git repository? Florian Breitwieser @ 2009-07-14 14:40 ` Alex Riesen 2009-07-14 14:54 ` Nicolas Sebrecht 2009-07-14 17:33 ` Linus Torvalds 2 siblings, 0 replies; 9+ messages in thread From: Alex Riesen @ 2009-07-14 14:40 UTC (permalink / raw) To: Florian Breitwieser; +Cc: git On Tue, Jul 14, 2009 at 15:20, Florian Breitwieser<florian.bw@gmail.com> wrote: > I have problems with my git repository, attached below are the steps I tried > to resolve it. But now I am stuck. Is there any good way to recover? There are recovery instructions all over the web, and on this mailing list. Try googling for "git repository corruption recovery". There is even one in Git's repository: Documentation/howto/recover-corrupted-blob-object.txt > $ git commit -m "Some message" > error: invalid object 1086b1c606a04bcb78b92d1d411a299d20d18034 Looks like you have hit a genuine repository corruption. You can try to look for the object in all copies of the project (or just in any projects you possibly have laying around) and copy it into you repo. To test if the object is present in a repo: git cat-file -t 1086b1c606a04bcb78b92d1d411a299d20d18034 You can just copy (or reference in .git/objects/info/alternates) the whole repo containing the object in the broken repo. You can cleanup unused objects afterwards. > fatal: Error building trees You can try "git log --pretty=raw --raw --no-abbrev HEAD | less" and look for the first commit which introduced the invalid object. The history up to this commit must be intact, BTW. Try to find out what object it was. If it was a file, than maybe you have the original source somewhere, or the latest version is present and good enough. Then you can checkout the good commit, introduce the file from the source, commit, and cherry-pick all the newer commits on top of it. If it was a tree, you can try to guess what files did it contain in the commit which references it and try to rebuild it by using git add and git write-tree (the latter prints the SHA1 of the generated tree on stdout, so you can retry indefinitely). If it happens to be a commit (you'll find the SHA1 in parents of the good commits, but it does not look like it is the case), you can try git fsck --lost-found to find all the commits which are not referenced, try connecting them (by using grafts, for example. Or checkout and cherry-pick described above). > $ git-fsck --full > dangling tree c2549a3cdd83098a523cb707f217f4656cde7eb5 > > $ git prune Now that was dangerous. When something was unreferenced (but useful) now it is lost. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Recover broken git repository? 2009-07-14 13:20 Recover broken git repository? Florian Breitwieser 2009-07-14 14:40 ` Alex Riesen @ 2009-07-14 14:54 ` Nicolas Sebrecht 2009-07-14 15:20 ` Jakub Narebski 2009-07-14 17:33 ` Linus Torvalds 2 siblings, 1 reply; 9+ messages in thread From: Nicolas Sebrecht @ 2009-07-14 14:54 UTC (permalink / raw) To: Florian Breitwieser; +Cc: git The 14/07/09, Florian Breitwieser wrote: > I have problems with my git repository, attached below are the steps I tried > to resolve it. But now I am stuck. Is there any good way to recover? You could git-format-patch your topics, clone a new repo and git-am the patches. -- Nicolas Sebrecht ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Recover broken git repository? 2009-07-14 14:54 ` Nicolas Sebrecht @ 2009-07-14 15:20 ` Jakub Narebski 0 siblings, 0 replies; 9+ messages in thread From: Jakub Narebski @ 2009-07-14 15:20 UTC (permalink / raw) To: Nicolas Sebrecht; +Cc: Florian Breitwieser, git Nicolas Sebrecht <nicolas.s.dev@gmx.fr> writes: > The 14/07/09, Florian Breitwieser wrote: > > > I have problems with my git repository, attached below are the steps I tried > > to resolve it. But now I am stuck. Is there any good way to recover? > > You could git-format-patch your topics, clone a new repo and git-am the > patches. Better solution, if possible, would be to use git-fast-export / git-fast-import pair. -- Jakub Narebski Poland ShadeHawk on #git ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Recover broken git repository? 2009-07-14 13:20 Recover broken git repository? Florian Breitwieser 2009-07-14 14:40 ` Alex Riesen 2009-07-14 14:54 ` Nicolas Sebrecht @ 2009-07-14 17:33 ` Linus Torvalds 2009-07-14 17:48 ` Stefan-W. Hahn ` (2 more replies) 2 siblings, 3 replies; 9+ messages in thread From: Linus Torvalds @ 2009-07-14 17:33 UTC (permalink / raw) To: Florian Breitwieser; +Cc: git On Tue, 14 Jul 2009, Florian Breitwieser wrote: > > $ git commit -m "Some message" > error: invalid object 1086b1c606a04bcb78b92d1d411a299d20d18034 > fatal: Error building trees Hmm. That "invalid object" error comes from 'update_one()' when it cannot find the object it is looking for. That, in turn, tends to be an issue of the index containing a SHA1 that does not exist in the database. Do you trust your filesystem? The symptoms really sound like you did a "git add .." earlier, and populated the index, but now the object that got populated is no longer found. What OS, what filesystem? Oh, and what version of git? > $ git-fsck --full > dangling tree c2549a3cdd83098a523cb707f217f4656cde7eb5 The fsck seems to imply that things are ok. The fsck _should_ have checked the index too. The 'git commit' obviously disagrees. Two things to check: - do you use grafts to hide old history, rather than connect additional history? That can be really dangerous, and will make fsck (and other tools) not look at the hidden state. - do you have alternates (is multiple _different_ repositories tat point to each other)? That can cause problems if you then do things like git prune in them. It wouldn't explain this particular case, but it's something I look out for when I hear about corruption. > $ git prune Not a good idea. When you suspect corruption, the _last_ thing you want to do is prune things. Who knows what happened? > $ git commit -m "Some message" > Created commit e32d5dd: Some message > 2 files changed, 167 insertions(+), 10 deletions(-) So now the same commit worked? It _really_ sounds like your filesystem has a hard time finding the files it just created. Some local caching issue. Is it a network filesystem? If so, what's the filesystem server and version, if you can find it out? > $ git push > Counting objects: 15, done. > Compressing objects: 100% (6/6), done. > Writing objects: 100% (8/8), 2.44 KiB, done. > Total 8 (delta 4), reused 0 (delta 0) > Unpacking objects: 100% (8/8), done. > fatal: unresolved deltas left after unpacking > error: unpack failed: unpacker exited with error code > To /mnt/extstore2/bioinformatic/git/ppi.git > ! [remote rejected] master -> master (n/a (unpacker error)) > error: failed to push some refs to > '/mnt/extstore2/bioinformatic/git/ppi.git' Here the other end doesn't have some object that we expect it to have, and that we sent a delta to it against. Sounds like potentially the exact same problem (it created some new file, but then couldn't see it). Is the thign you are pushing to a similar machine with similar filesystems? We've had issues with both CIFS and NFS. Using [core] fsyncobjectfiles = true might work around some issues where the filesystem does crazy things. But I'd really like to hear what OS and filesystem versions you're running. Linus ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Recover broken git repository? 2009-07-14 17:33 ` Linus Torvalds @ 2009-07-14 17:48 ` Stefan-W. Hahn 2009-07-14 17:52 ` Stefan-W. Hahn 2009-07-14 18:25 ` [PATCH] Improve on the 'invalid object' error message at commit time Linus Torvalds 2 siblings, 0 replies; 9+ messages in thread From: Stefan-W. Hahn @ 2009-07-14 17:48 UTC (permalink / raw) To: Linus Torvalds; +Cc: Florian Breitwieser, git Also sprach Linus Torvalds am Tue, 14 Jul 2009 at 10:33:58 -0700: > > > On Tue, 14 Jul 2009, Florian Breitwieser wrote: > > > > $ git commit -m "Some message" > > error: invalid object 1086b1c606a04bcb78b92d1d411a299d20d18034 > > fatal: Error building trees > > Hmm. That "invalid object" error comes from 'update_one()' when it cannot > find the object it is looking for. That, in turn, tends to be an issue of > the index containing a SHA1 that does not exist in the database. > > Do you trust your filesystem? The symptoms really sound like you did a > "git add .." earlier, and populated the index, but now the object that got > populated is no longer found. > > What OS, what filesystem? Oh, and what version of git? > > > $ git-fsck --full > > dangling tree c2549a3cdd83098a523cb707f217f4656cde7eb5 > > The fsck seems to imply that things are ok. The fsck _should_ have checked > the index too. > > The 'git commit' obviously disagrees. > > Two things to check: > > - do you use grafts to hide old history, rather than connect additional > history? > > That can be really dangerous, and will make fsck (and other tools) not > look at the hidden state. > > - do you have alternates (is multiple _different_ repositories tat point > to each other)? That can cause problems if you then do things like git > prune in them. It wouldn't explain this particular case, but it's > something I look out for when I hear about corruption. > > > $ git prune > > Not a good idea. When you suspect corruption, the _last_ thing you want to > do is prune things. Who knows what happened? > > > $ git commit -m "Some message" > > Created commit e32d5dd: Some message > > 2 files changed, 167 insertions(+), 10 deletions(-) > > So now the same commit worked? It _really_ sounds like your filesystem has > a hard time finding the files it just created. Some local caching issue. > > Is it a network filesystem? If so, what's the filesystem server and > version, if you can find it out? > > > $ git push > > Counting objects: 15, done. > > Compressing objects: 100% (6/6), done. > > Writing objects: 100% (8/8), 2.44 KiB, done. > > Total 8 (delta 4), reused 0 (delta 0) > > Unpacking objects: 100% (8/8), done. > > fatal: unresolved deltas left after unpacking > > error: unpack failed: unpacker exited with error code > > To /mnt/extstore2/bioinformatic/git/ppi.git > > ! [remote rejected] master -> master (n/a (unpacker error)) > > error: failed to push some refs to > > '/mnt/extstore2/bioinformatic/git/ppi.git' > > Here the other end doesn't have some object that we expect it to have, and > that we sent a delta to it against. Sounds like potentially the exact same > problem (it created some new file, but then couldn't see it). Is the thign > you are pushing to a similar machine with similar filesystems? > > We've had issues with both CIFS and NFS. Using > > [core] > fsyncobjectfiles = true > > might work around some issues where the filesystem does crazy things. But > I'd really like to hear what OS and filesystem versions you're running. > > Linus > -- > To unsubscribe from this list: send the line "unsubscribe git" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Stefan-W. Hahn It is easy to make things. / mailto:stefan.hahn@s-hahn.de / It is hard to make things simple. Please note that according to the German law on data retention, information on every electronic information exchange with me is retained for a period of six months. Bundesgesetzblatt: http://www.bgblportal.de/BGBL/bgbl1f/bgbl107s3198.pdf ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Recover broken git repository? 2009-07-14 17:33 ` Linus Torvalds 2009-07-14 17:48 ` Stefan-W. Hahn @ 2009-07-14 17:52 ` Stefan-W. Hahn 2009-07-14 18:25 ` [PATCH] Improve on the 'invalid object' error message at commit time Linus Torvalds 2 siblings, 0 replies; 9+ messages in thread From: Stefan-W. Hahn @ 2009-07-14 17:52 UTC (permalink / raw) To: Florian Breitwieser; +Cc: git Also sprach Linus Torvalds am Tue, 14 Jul 2009 at 10:33:58 -0700: Hi, > > $ git commit -m "Some message" > > error: invalid object 1086b1c606a04bcb78b92d1d411a299d20d18034 > > fatal: Error building trees I've trapped in a similar problem few days ago on windows using cygwin. A simple "git status" told me an invalid object. Just doing git status corrupted the index file and only this. The reason was a wrong configured (unseen reconfigured from another script) mount via cygwin using "textmode" not "binary mode". After remounting with "binary mode" a simple "git read-tree HEAD" repaired it. Just the index file had been corrupted. Stefan -- Stefan-W. Hahn It is easy to make things. / mailto:stefan.hahn@s-hahn.de / It is hard to make things simple. Please note that according to the German law on data retention, information on every electronic information exchange with me is retained for a period of six months. Bundesgesetzblatt: http://www.bgblportal.de/BGBL/bgbl1f/bgbl107s3198.pdf ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH] Improve on the 'invalid object' error message at commit time 2009-07-14 17:33 ` Linus Torvalds 2009-07-14 17:48 ` Stefan-W. Hahn 2009-07-14 17:52 ` Stefan-W. Hahn @ 2009-07-14 18:25 ` Linus Torvalds 2009-07-14 19:43 ` Junio C Hamano 2 siblings, 1 reply; 9+ messages in thread From: Linus Torvalds @ 2009-07-14 18:25 UTC (permalink / raw) To: Junio C Hamano, Git Mailing List; +Cc: Florian Breitwieser Not that anybody should ever get it, but somebody did (probably because of a flaky filesystem, but whatever). And each time I see an error message that I haven't seen before, I decide that next time it will look better. So this makes us write more relevant information about exactly which file ended up having issues with a missing object. Which will tell whether it was a tree object, for example, or just a regular file in the index (and which one). Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> --- Not a big deal. But since somebody actually saw this message, let's just make it more informative. A lot of the "these can't happen unless you're seriously screwed" messages aren't very good, because there is little upside when doing development. But let's try to improve on them in case they happen in the future. Not that this would make debugging much easier, but one thing that I started wondering about was whether the problem Florian saw was about one of the files he had done "git add" on, or whether it was a tree entry that was the result of "find_subtree()". cache-tree.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/cache-tree.c b/cache-tree.c index 16a65df..d917437 100644 --- a/cache-tree.c +++ b/cache-tree.c @@ -329,7 +329,8 @@ static int update_one(struct cache_tree *it, entlen = pathlen - baselen; } if (mode != S_IFGITLINK && !missing_ok && !has_sha1_file(sha1)) - return error("invalid object %s", sha1_to_hex(sha1)); + return error("invalid object %06o %s for '%.*s'", + mode, sha1_to_hex(sha1), entlen+baselen, path); if (ce->ce_flags & CE_REMOVE) continue; /* entry being removed */ ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] Improve on the 'invalid object' error message at commit time 2009-07-14 18:25 ` [PATCH] Improve on the 'invalid object' error message at commit time Linus Torvalds @ 2009-07-14 19:43 ` Junio C Hamano 0 siblings, 0 replies; 9+ messages in thread From: Junio C Hamano @ 2009-07-14 19:43 UTC (permalink / raw) To: Linus Torvalds; +Cc: Junio C Hamano, Git Mailing List, Florian Breitwieser Linus Torvalds <torvalds@linux-foundation.org> writes: > ... one thing that I > started wondering about was whether the problem Florian saw was about one > of the files he had done "git add" on, or whether it was a tree entry that > was the result of "find_subtree()". Same here. Historically, cache-tree had issues that same corner case codepaths forgot invalidating subtrees when they should that could have led to kinds of bugs that are hard to diagnose. I think the API got harder to make that kind of mistakes while we squashed those bugs, though. ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2009-07-14 19:43 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-07-14 13:20 Recover broken git repository? Florian Breitwieser 2009-07-14 14:40 ` Alex Riesen 2009-07-14 14:54 ` Nicolas Sebrecht 2009-07-14 15:20 ` Jakub Narebski 2009-07-14 17:33 ` Linus Torvalds 2009-07-14 17:48 ` Stefan-W. Hahn 2009-07-14 17:52 ` Stefan-W. Hahn 2009-07-14 18:25 ` [PATCH] Improve on the 'invalid object' error message at commit time Linus Torvalds 2009-07-14 19:43 ` Junio C Hamano
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).