Home Explore Blog CI



git

3rd chunk of `Documentation/gitformat-pack.adoc`
a9f6ebebaa47859f954748a44ec41122ed102c13803790ff0000000100000fa0
 instruction to construct the target object without the base
object. The following data is appended to the target object. The first
seven bits of the first octet determine the size of data in
bytes. The size must be non-zero.

==== Reserved instruction

  +----------+============
  | 00000000 |
  +----------+============

This is the instruction reserved for future expansion.

== Original (version 1) pack-*.idx files have the following format:

  - The header consists of 256 4-byte network byte order
    integers.  N-th entry of this table records the number of
    objects in the corresponding pack, the first byte of whose
    object name is less than or equal to N.  This is called the
    'first-level fan-out' table.

  - The header is followed by sorted 24-byte entries, one entry
    per object in the pack.  Each entry is:

    4-byte network byte order integer, recording where the
    object is stored in the packfile as the offset from the
    beginning.

    one object name of the appropriate size.

  - The file is concluded with a trailer:

    A copy of the pack checksum at the end of the corresponding
    packfile.

    Index checksum of all of the above.

Pack Idx file:

	--  +--------------------------------+
fanout	    | fanout[0] = 2 (for example)    |-.
table	    +--------------------------------+ |
	    | fanout[1]                      | |
	    +--------------------------------+ |
	    | fanout[2]                      | |
	    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
	    | fanout[255] = total objects    |---.
	--  +--------------------------------+ | |
main	    | offset                         | | |
index	    | object name 00XXXXXXXXXXXXXXXX | | |
table	    +--------------------------------+ | |
	    | offset                         | | |
	    | object name 00XXXXXXXXXXXXXXXX | | |
	    +--------------------------------+<+ |
	  .-| offset                         |   |
	  | | object name 01XXXXXXXXXXXXXXXX |   |
	  | +--------------------------------+   |
	  | | offset                         |   |
	  | | object name 01XXXXXXXXXXXXXXXX |   |
	  | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   |
	  | | offset                         |   |
	  | | object name FFXXXXXXXXXXXXXXXX |   |
	--| +--------------------------------+<--+
trailer	  | | packfile checksum              |
	  | +--------------------------------+
	  | | idxfile checksum               |
	  | +--------------------------------+
          .-------.
                  |
Pack file entry: <+

     packed object header:
	1-byte size extension bit (MSB)
	       type (next 3 bit)
	       size0 (lower 4-bit)
        n-byte sizeN (as long as MSB is set, each 7-bit)
		size0..sizeN form 4+7+7+..+7 bit integer, size0
		is the least significant part, and sizeN is the
		most significant part.
     packed object data:
        If it is not DELTA, then deflated bytes (the size above
		is the size before compression).
	If it is REF_DELTA, then
	  base object name (the size above is the
		size of the delta data that follows).
          delta data, deflated.
	If it is OFS_DELTA, then
	  n-byte offset (see below) interpreted as a negative
		offset from the type-byte of the header of the
		ofs-delta entry (the size above is the size of
		the delta data that follows).
	  delta data, deflated.

     offset encoding:
	  n bytes with MSB set in all but the last one.
	  The offset is then the number constructed by
	  concatenating the lower 7 bit of each byte, and
	  for n >= 2 adding 2^7 + 2^14 + ... + 2^(7*(n-1))
	  to the result.



== Version 2 pack-*.idx files support packs larger than 4 GiB, and
   have some other reorganizations.  They have the format:

  - A 4-byte magic number '\377tOc' which is an unreasonable
    fanout[0] value.

  - A 4-byte version number (= 2)

  - A 256-entry fan-out table just like v1.

  - A table of sorted object names.  These are packed together
    without offset values to reduce the cache footprint of the
    binary search for a specific object name.

  - A

Title: Git Pack File Index Format and Entry Structure
Summary
This document describes the structure of Git pack file index files, including the fan-out table, main index table, and trailer, as well as the format of pack file entries, including packed object headers and data, and explains the differences between version 1 and version 2 index files.