commit-graph: add format document
authorDerrick Stolee <dstolee@microsoft.com>
Mon, 2 Apr 2018 20:34:16 +0000 (16:34 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 2 Apr 2018 21:27:31 +0000 (14:27 -0700)
commitb84f767c8a9bcf69b4cfa7fbe44441201a12541e
tree092ba7c4004b2ac7682510345f080c3a365fb163
parentcfe83216e404223ce8c5f6ef79c4ba9a27ff872e
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]