Re: Manually decoding a git object
- From
Thomas Rast <trast@inf.ethz.ch>
- Date
- Feb 20, 2012, 08:29 UTC
- Message-ID
- <87mx8dj4at.fsf@thomas.inf.ethz.ch>
- In-Reply-To
- <A716A27D407F401DAAC373027D5CFF2A@PhilipOakley>
"Philip Oakley" <philipoakley@iee.org> writes:
Show 6 quoted lines
> If I have a renamed file which is a git object, such a "Git_Object", was > 8c-something-or-other, what is the easiest way of examining / decoding / > recreating the original file (either as its sha1, or a cat-file). > > I don't appear to be able to unzip the file in its raw format... I'm using > Msysgit on windows XP.
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.
--
Thomas Rast
trast@{inf,student}.ethz.ch