commit-graph: add format document
authorDerrick Stolee <stolee@gmail.com>
Mon, 19 Feb 2018 18:53:14 +0000 (13:53 -0500)
committerJunio C Hamano <gitster@pobox.com>
Tue, 20 Feb 2018 20:30:05 +0000 (12:30 -0800)
commit96e8c87096a5fe0e5b9cd1f4e7c56c83e7d0d160
tree42f707ff0e3a9efa6c8bc902f83a5e7fafa6d122
parentb4e00f7306a160639f047b3421985e8f3d0c6fb1
commit-graph: add format document

Add document specifying the binary format for commit graphs. This
format allows for:

* New versions.
* New hash functions and hash lengths.
* Optional extensions.

Basic header information is followed by a binary table of contents
into "chunks" that include:

* An ordered list of commit object IDs.
* A 256-entry fanout into that list of OIDs.
* A list of metadata for the commits.
* A list of "large edges" to enable octopus merges.

The format automatically includes two parent positions for every
commit. This favors speed over space, since using only one position
per commit would cause an extra level of indirection for every merge
commit. (Octopus merges suffer from this indirection, but they are
very rare.)

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/technical/commit-graph-format.txt [new file with mode: 0644]