Re: Manually decoding a git object
- From
徐迪 <xudifsd@gmail.com>
- Date
- Feb 20, 2012, 11:39 UTC
- Message-ID
- <CAMocUqQdBH3BhWGfFCiCLXhtw=-tRVdL9RBjma_tdoVdj2-Crw@mail.gmail.com>
- In-Reply-To
- <871uppbwnu.fsf@thomas.inf.ethz.ch>
2012/2/20 Thomas Rast <trast@inf.ethz.ch>:
Show 26 quoted lines
> Philip Oakley <philipoakley@iee.org> writes:
>
>> From: "Thomas Rast" <trast@inf.ethz.ch> Sent: Monday, February 20,
>> 2012 8:29 AM
>>>
>>> The SHA1 is over the decompressed object contents. The file simply
>>> holds a zlib-compressed stream of those contents. (It's pretty much
>>> like gzip without the file header.)
>>>
>>> You can use any bindings to zlib and something that does sha1, e.g. in
>>> python:
>>>
>>> $ cd g/.git/objects/aa/ # my git.git
>>> $ ls
>>> 592bda986a8380b64acd8cbb3d5bdfcbc0834d
>>> 6322a757bee31919f54edcc127608a3d724c99
>>> $ python
>>> Python 2.7.2 (default, Aug 19 2011, 20:41:43) [GCC] on linux2
>>> Type "help", "copyright", "credits" or "license" for more information.
>>> >>> import hashlib
>>> >>>
>>> hashlib.sha1(open('592bda986a8380b64acd8cbb3d5bdfcbc0834d').read().decode('zlib')).digest().encode('hex')
>>> 'aa592bda986a8380b64acd8cbb3d5bdfcbc0834d'
>>>
>>> Notice that the first byte of the hash goes into the directory name.
>>>I think Thomas got the point.
> When I tried it from my home directory (not in a git directory): > $ git cat-file -p Git-Object > fatal: Not a git repository (or any of the parent directories): .git
this is because git will first do a git-dir-search, if you're current work dir is not within git repo, it will die. I really do not know how you get thing that mess. From the link[1] you give, i think you just want to clone a repo across computer not by network, if so this[2] will be helpful.
[1]:http://stackoverflow.com/questions/9343260/what-after-git-unpack-objects-to-get-the-actual-file [2]:http://progit.org/2010/03/10/bundles.html