Home Explore Blog CI



git

1st chunk of `Documentation/gitformat-index.adoc`
ab503b5b07b50c334cd071d6fa5591d3701df36d8227689a0000000100000fa2
gitformat-index(5)
==================

NAME
----
gitformat-index - Git index format

SYNOPSIS
--------
[verse]
$GIT_DIR/index

DESCRIPTION
-----------

Git index format

== The Git index file has the following format

  All binary numbers are in network byte order.
  In a repository using the traditional SHA-1, 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.
  Version 2 is described here unless stated otherwise.

   - A 12-byte header consisting of

     4-byte signature:
       The signature is { 'D', 'I', 'R', 'C' } (stands for "dircache")

     4-byte version number:
       The current supported versions are 2, 3 and 4.

     32-bit number of index entries.

   - A number of sorted index entries (see below).

   - Extensions

     Extensions are identified by signature. Optional extensions can
     be ignored if Git does not understand them.

     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

   - Hash checksum over the content of the index file before this checksum.

== Index entry

  Index entries are sorted in ascending order on the name field,
  interpreted as a string of unsigned bytes (i.e. memcmp() order, no
  localization, no special casing of directory separator '/'). Entries
  with the same name are sorted by their stage field.

  An index entry typically represents a file. However, if sparse-checkout
  is enabled in cone mode (`core.sparseCheckoutCone` is enabled) and the
  `extensions.sparseIndex` extension is enabled, then the index may
  contain entries for directories outside of the sparse-checkout definition.
  These entries have mode `040000`, include the `SKIP_WORKTREE` bit, and
  the path ends in a directory separator.

  32-bit ctime seconds, the last time a file's metadata changed
    this is stat(2) data

  32-bit ctime nanosecond fractions
    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 nanosecond fractions
    this is stat(2) data

  32-bit dev
    this is stat(2) data

  32-bit ino
    this is stat(2) data

  32-bit mode, split into (high to low bits)

    16-bit unused, must be zero

    4-bit object type
      valid values in binary are 1000 (regular file), 1010 (symbolic link)
      and 1110 (gitlink)

    3-bit unused, must be zero

    9-bit unix permission. Only 0755 and 0644 are valid for regular files.
    Symbolic links and gitlinks have value 0 in this field.

  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), truncated to 32-bit.

  Object name for the represented object

  A 16-bit 'flags' field split into (high to low bits)

    1-bit assume-valid flag

    1-bit extended flag (must be zero in version 2)

    2-bit stage (during merge)

    12-bit name length if the length is less than 0xFFF; otherwise 0xFFF
    is stored in this field.

  (Version 3 or later) A 16-bit field, only applicable if the
  "extended flag" above is 1, split into (high to low bits).

    1-bit reserved for future

    1-bit skip-worktree flag (used by sparse checkout)

    1-bit intent-to-add flag (used by "git add -N")

    13-bit unused, must be zero

  Entry path name (variable length) relative to top level directory
    (without leading slash). '/' is used as path separator. The special
    path components ".", ".." and ".git" (without quotes) are disallowed.
    Trailing slash is also disallowed.

    The exact encoding is undefined, but the '.' and '/' characters
    are encoded in 7-bit ASCII and the encoding cannot contain a NUL
    byte (iow, this is a UNIX pathname).

  (Version 4) In version 4, the entry path name is prefix-compressed
    relative to the path name for the previous entry (the very first

Title: Git Index Format Documentation
Summary
This document describes the format of the Git index file, including its header, index entries, and extensions, providing details on the binary structure and fields used to represent file metadata and content.