user-manual: move object format details to hacking-git chapter
Most of this is probably only of interest to git developers. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>maint
							parent
							
								
									971aa71fc6
								
							
						
					
					
						commit
						f2327c6c52
					
				|  | @ -2760,29 +2760,6 @@ used to sign other objects. It contains the identifier and type of | ||||||
| another object, a symbolic name (of course!) and, optionally, a | another object, a symbolic name (of course!) and, optionally, a | ||||||
| signature. | signature. | ||||||
|  |  | ||||||
| Regardless of object type, all objects share the following |  | ||||||
| characteristics: they are all deflated with zlib, and have a header |  | ||||||
| that not only specifies their type, but also provides size information |  | ||||||
| about the data in the object.  It's worth noting that the SHA1 hash |  | ||||||
| that is used to name the object is the hash of the original data |  | ||||||
| plus this header, so `sha1sum` 'file' does not match the object name |  | ||||||
| for 'file'. |  | ||||||
| (Historical note: in the dawn of the age of git the hash |  | ||||||
| was the sha1 of the 'compressed' object.) |  | ||||||
|  |  | ||||||
| As a result, the general consistency of an object can always be tested |  | ||||||
| independently of the contents or the type of the object: all objects can |  | ||||||
| be validated by verifying that (a) their hashes match the content of the |  | ||||||
| file and (b) the object successfully inflates to a stream of bytes that |  | ||||||
| forms a sequence of <ascii type without space> {plus} <space> {plus} <ascii decimal |  | ||||||
| size> {plus} <byte\0> {plus} <binary object data>. |  | ||||||
|  |  | ||||||
| The structured objects can further have their structure and |  | ||||||
| connectivity to other objects verified. This is generally done with |  | ||||||
| the `git-fsck` program, which generates a full dependency graph |  | ||||||
| of all objects, and verifies their internal consistency (in addition |  | ||||||
| to just verifying their superficial consistency through the hash). |  | ||||||
|  |  | ||||||
| The object types in some more detail: | The object types in some more detail: | ||||||
|  |  | ||||||
| [[blob-object]] | [[blob-object]] | ||||||
|  | @ -3481,6 +3458,38 @@ Hacking git | ||||||
| This chapter covers internal details of the git implementation which | This chapter covers internal details of the git implementation which | ||||||
| probably only git developers need to understand. | probably only git developers need to understand. | ||||||
|  |  | ||||||
|  | [[object-details]] | ||||||
|  | Object storage format | ||||||
|  | --------------------- | ||||||
|  |  | ||||||
|  | All objects have a statically determined "type" which identifies the | ||||||
|  | format of the object (i.e. how it is used, and how it can refer to other | ||||||
|  | objects).  There are currently four different object types: "blob", | ||||||
|  | "tree", "commit", and "tag". | ||||||
|  |  | ||||||
|  | Regardless of object type, all objects share the following | ||||||
|  | characteristics: they are all deflated with zlib, and have a header | ||||||
|  | that not only specifies their type, but also provides size information | ||||||
|  | about the data in the object.  It's worth noting that the SHA1 hash | ||||||
|  | that is used to name the object is the hash of the original data | ||||||
|  | plus this header, so `sha1sum` 'file' does not match the object name | ||||||
|  | for 'file'. | ||||||
|  | (Historical note: in the dawn of the age of git the hash | ||||||
|  | was the sha1 of the 'compressed' object.) | ||||||
|  |  | ||||||
|  | As a result, the general consistency of an object can always be tested | ||||||
|  | independently of the contents or the type of the object: all objects can | ||||||
|  | be validated by verifying that (a) their hashes match the content of the | ||||||
|  | file and (b) the object successfully inflates to a stream of bytes that | ||||||
|  | forms a sequence of <ascii type without space> {plus} <space> {plus} <ascii decimal | ||||||
|  | size> {plus} <byte\0> {plus} <binary object data>. | ||||||
|  |  | ||||||
|  | The structured objects can further have their structure and | ||||||
|  | connectivity to other objects verified. This is generally done with | ||||||
|  | the `git-fsck` program, which generates a full dependency graph | ||||||
|  | of all objects, and verifies their internal consistency (in addition | ||||||
|  | to just verifying their superficial consistency through the hash). | ||||||
|  |  | ||||||
| [[birdview-on-the-source-code]] | [[birdview-on-the-source-code]] | ||||||
| A birds-eye view of Git's source code | A birds-eye view of Git's source code | ||||||
| ------------------------------------- | ------------------------------------- | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 J. Bruce Fields
						J. Bruce Fields