Signed-off-by: Robin Rosenberg <robin.rosenberg@xxxxxxxxxx> --- Documentation/technical/index-format.txt | 91 ++++++++++++++++++++++++++++++ 1 files changed, 91 insertions(+), 0 deletions(-) create mode 100644 Documentation/technical/index-format.txt I believe the main index details are accurate. Anything else to explain. The TREE section probably needs more details. -- robin diff --git a/Documentation/technical/index-format.txt b/Documentation/technical/index-format.txt new file mode 100644 index 0000000..c57b382 --- /dev/null +++ b/Documentation/technical/index-format.txt @@ -0,0 +1,91 @@ +GIT index format +================ + += The git index file has the following format + + All binary numbers are in network byte order. + + - A twelve byte header consisting of + + 4 byte signature: + The signature is { 'D', 'I', 'R', 'C' } + + 4 byte version number: + The current version is 2 + + 32-bit number of index entries. + + - An entry consists of + + 32-bit ctime seconds, the last time a file's metadata changed + this is stat(2) data + + 32-bit ctime nanoseconds (modulo 1G) + this is stat(2) data + + 32-bit mtime seconds, the last time a file's data changed + this is stat(2) data + + 32-bit mtime nanoseconds (modulo 1G) + this is stat(2) data + + 32-bit dev + this is stat(2) data + + 32-bit uid + this is stat(2) data + + 32-bit gid + this is stat(2) data + + 32-bit file size + This is the on-disk size from stat(2) + + 160-bit SHA-1 for the represented blob + + A 16-bit field split into (high to low bits) + + 1-bit assume-valid flag + + 1-bit update-needed flag + + 2-bit stage (during merge) + + 12-bit name length + + Name (variable length) - encoding is undefined + + 1-8 nul bytes as necessary to pad the entry to a multiple ot eight bytes + while keeping the name NUL-terminated. + + - Extensions + + The only know index extension today is a tree cache. It contains + pre-computes hashes for all trees that can be derived from the index + + 4 byte extension signature. If the first byte is 'A'..'Z' the + extension is optional and can be ignored. + + 32-bit size of the extension + + Extension data + + - 160-bit SHA-1 over the content of the index file before this checksum. + + +== Tree cache + + - Extension tag { 'T', 'R', 'E', 'E' } + + - 32-bit size + + - A number of entries + + NUL-terminated tree name + + Blank-terminated ASCII decimal number of entries in this tree + + Newline-terminated position of this tree in the parent tree. 0 for + the root tree + + 160-bit SHA-1 for this tree and it's children -- 1.5.4.rc4.25.g81cc - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html