54 lines
1.8 KiB
Plaintext
54 lines
1.8 KiB
Plaintext
gitformat-loose(5)
|
|
==================
|
|
|
|
NAME
|
|
----
|
|
gitformat-loose - Git loose object format
|
|
|
|
|
|
SYNOPSIS
|
|
--------
|
|
[verse]
|
|
$GIT_DIR/objects/[0-9a-f][0-9a-f]/*
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
|
|
Loose objects are how Git stores individual objects, where every object is
|
|
written as a separate file.
|
|
|
|
Over the lifetime of a repository, objects are usually written as loose objects
|
|
initially. Eventually, these loose objects will be compacted into packfiles
|
|
via repository maintenance to improve disk space usage and speed up the lookup
|
|
of these objects.
|
|
|
|
== Loose objects
|
|
|
|
Each loose object contains a prefix, followed immediately by the data of the
|
|
object. The prefix contains `<type> <size>\0`. `<type>` is one of `blob`,
|
|
`tree`, `commit`, or `tag` and `size` is the size of the data (without the
|
|
prefix) as a decimal integer expressed in ASCII.
|
|
|
|
The entire contents, prefix and data concatenated, is then compressed with zlib
|
|
and the compressed data is stored in the file. The object ID of the object is
|
|
the SHA-1 or SHA-256 (as appropriate) hash of the uncompressed data.
|
|
|
|
The file for the loose object is stored under the `objects` directory, with the
|
|
first two hex characters of the object ID being the directory and the remaining
|
|
characters being the file name. This is done to shard the data and avoid too
|
|
many files being in one directory, since some file systems perform poorly with
|
|
many items in a directory.
|
|
|
|
As an example, the empty tree contains the data (when uncompressed) `tree 0\0`
|
|
and, in a SHA-256 repository, would have the object ID
|
|
`6ef19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321` and would be
|
|
stored under
|
|
`$GIT_DIR/objects/6e/f19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321`.
|
|
|
|
Similarly, a blob containing the contents `abc` would have the uncompressed
|
|
data of `blob 3\0abc`.
|
|
|
|
GIT
|
|
---
|
|
Part of the linkgit:git[1] suite
|