docs: document SHA-256 pack and indices

Now that we have SHA-256 support for packs and indices, let's document
that in SHA-256 repositories, we use SHA-256 instead of SHA-1 for object
names and checksums.  Instead of duplicating this information throughout
the document, let's just document that in SHA-1 repositories, we use
SHA-1 for these purposes, and in SHA-256 repositories, we use SHA-256.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
brian m. carlson 2020-08-13 22:49:00 +00:00 committed by Junio C Hamano
parent 878e727637
commit 17420eafa9

View File

@ -1,6 +1,12 @@
Git pack format Git pack format
=============== ===============
== Checksums and object IDs
In a repository using the traditional SHA-1, pack checksums, index checksums,
and object IDs (object names) mentioned below are all computed using SHA-1.
Similarly, in SHA-256 repositories, these values are computed using SHA-256.
== pack-*.pack files have the following format: == pack-*.pack files have the following format:
- A header appears at the beginning and consists of the following: - A header appears at the beginning and consists of the following:
@ -26,7 +32,7 @@ Git pack format
(deltified representation) (deltified representation)
n-byte type and length (3-bit type, (n-1)*7+4-bit length) n-byte type and length (3-bit type, (n-1)*7+4-bit length)
20-byte base object name if OBJ_REF_DELTA or a negative relative base object name if OBJ_REF_DELTA or a negative relative
offset from the delta object's position in the pack if this offset from the delta object's position in the pack if this
is an OBJ_OFS_DELTA object is an OBJ_OFS_DELTA object
compressed delta data compressed delta data
@ -34,7 +40,7 @@ Git pack format
Observation: length of each object is encoded in a variable Observation: length of each object is encoded in a variable
length format and is not constrained to 32-bit or anything. length format and is not constrained to 32-bit or anything.
- The trailer records 20-byte SHA-1 checksum of all of the above. - The trailer records a pack checksum of all of the above.
=== Object types === Object types
@ -58,8 +64,8 @@ ofs-delta and ref-delta, which is only valid in a pack file.
Both ofs-delta and ref-delta store the "delta" to be applied to Both ofs-delta and ref-delta store the "delta" to be applied to
another object (called 'base object') to reconstruct the object. The another object (called 'base object') to reconstruct the object. The
difference between them is, ref-delta directly encodes 20-byte base difference between them is, ref-delta directly encodes base object
object name. If the base object is in the same pack, ofs-delta encodes name. If the base object is in the same pack, ofs-delta encodes
the offset of the base object in the pack instead. the offset of the base object in the pack instead.
The base object could also be deltified if it's in the same pack. The base object could also be deltified if it's in the same pack.
@ -143,14 +149,14 @@ This is the instruction reserved for future expansion.
object is stored in the packfile as the offset from the object is stored in the packfile as the offset from the
beginning. beginning.
20-byte object name. one object name of the appropriate size.
- The file is concluded with a trailer: - The file is concluded with a trailer:
A copy of the 20-byte SHA-1 checksum at the end of A copy of the pack checksum at the end of the corresponding
corresponding packfile. packfile.
20-byte SHA-1-checksum of all of the above. Index checksum of all of the above.
Pack Idx file: Pack Idx file:
@ -198,7 +204,7 @@ Pack file entry: <+
If it is not DELTA, then deflated bytes (the size above If it is not DELTA, then deflated bytes (the size above
is the size before compression). is the size before compression).
If it is REF_DELTA, then If it is REF_DELTA, then
20-byte base object name SHA-1 (the size above is the base object name (the size above is the
size of the delta data that follows). size of the delta data that follows).
delta data, deflated. delta data, deflated.
If it is OFS_DELTA, then If it is OFS_DELTA, then
@ -227,9 +233,9 @@ Pack file entry: <+
- A 256-entry fan-out table just like v1. - A 256-entry fan-out table just like v1.
- A table of sorted 20-byte SHA-1 object names. These are - A table of sorted object names. These are packed together
packed together without offset values to reduce the cache without offset values to reduce the cache footprint of the
footprint of the binary search for a specific object name. binary search for a specific object name.
- A table of 4-byte CRC32 values of the packed object data. - A table of 4-byte CRC32 values of the packed object data.
This is new in v2 so compressed data can be copied directly This is new in v2 so compressed data can be copied directly
@ -248,10 +254,10 @@ Pack file entry: <+
- The same trailer as a v1 pack file: - The same trailer as a v1 pack file:
A copy of the 20-byte SHA-1 checksum at the end of A copy of the pack checksum at the end of
corresponding packfile. corresponding packfile.
20-byte SHA-1-checksum of all of the above. Index checksum of all of the above.
== multi-pack-index (MIDX) files have the following format: == multi-pack-index (MIDX) files have the following format:
@ -329,4 +335,4 @@ CHUNK DATA:
TRAILER: TRAILER:
20-byte SHA1-checksum of the above contents. Index checksum of the above contents.