On Thu, Jan 01, 2009 at 12:24:59PM +0800, jidanni@xxxxxxxxxxx wrote: > JK> AFAIK, there is no tool to try salvaging strings from an incomplete pack > JK> (and you can't just run "strings" because the deltas are zlib > JK> compressed). So if I were in the police forensics department, I think I > JK> would read Documentation/technical/pack-format.txt and start hacking a > JK> solution as quickly as possible. > > Hogwash. Patch follows. Maybe even better methods are available. > [...] > +$ sed '/^PACK/,$!d' mybundle.bun > mybundle.pack > +$ git unpack-objects < mybundle.pack > +$ cd .git/objects > +$ ls ??/*|tr -d /|git cat-file --batch-check > +$ ls ??/*|tr -d /|git cat-file --batch Sorry, no, but your method does not work in the case I described: a thin pack with deltas. In that case, git unpack-objects cannot unpack the object since it lacks the delta, and will skip it. For example: # create a bundle with a thin delta blob mkdir one && cd one && git init cp /usr/share/dict/words . && git add words && git commit -m one echo SECRET MESSAGE >>words && git add words && git commit -m two git bundle create ../mybundle.bun HEAD^.. # now try to fetch from it mkdir ../two && cd ../two && git init git bundle unbundle ../mybundle.bun # produces: # error: Repository lacks these prerequisite commits: # error: b7d1a0ca98ca0e997d4222459d6fc1c9edae6a3f one # so try to recover sed '/^PACK/,$!d' ../mybundle.bun > mybundle.pack git unpack-objects < mybundle.pack # Unpacking objects: 100% (3/3), done. # fatal: unresolved deltas left after unpacking cd .git/objects # this will show just two objects: the commit and the tree ls ??/* | tr -d / # confirm that we don't have the blob or the string of interest ls ??/* | tr -d / | git cat-file --batch | grep SECRET It is nice that unpack-objects continues at all thanks to the recent improvements by Nicolas, so you may be able to get some of the data out. But it just skips over any unresolvable deltas, since we can't make a useful object from them. Maybe it would be worth adding an option to dump the uncompressed deltas to a file or directory so you could run "strings" on them to recover some of the data. -Peff -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html