NAME
git-cat-file - Provide content or type and size information for repository objects
SYNOPSIS
- git cat-file (-t [--allow-unknown-type]| -s [--allow-unknown-type]| -e | -p | <type> | --textconv | --filters ) [--path=<path>] <object>
- git cat-file (--batch | --batch-check) [ --textconv | --filters ] [--follow-symlinks]
DESCRIPTION
In its first form, the command provides the content or the type of an object inthe repository. The type is required unless -t
or -p
is used to find theobject type, or -s
is used to find the object size, or —textconv
or—filters
is used (which imply type "blob").
In the second form, a list of objects (separated by linefeeds) is provided onstdin, and the SHA-1, type, and size of each object is printed on stdout. Theoutput format can be overridden using the optional <format>
argument. Ifeither —textconv
or —filters
was specified, the input is expected tolist the object names followed by the path name, separated by a singlewhitespace, so that the appropriate drivers can be determined.
OPTIONS
-
OUTPUT
If
-t
is specified, one of the <type>.If
-s
is specified, the size of the <object> in bytes.If
-e
is specified, no output, unless the <object> is malformed.If
-p
is specified, the contents of <object> are pretty-printed.If <type> is specified, the raw (though uncompressed) contents of the <object>will be returned.
BATCH OUTPUT
If
—batch
or—batch-check
is given,cat-file
will read objectsfrom stdin, one per line, and print information about them. By default,the whole line is considered as an object, as if it were fed togit-rev-parse[1].You can specify the information shown for each object by using a custom
<format>
. The<format>
is copied literally to stdout for eachobject, with placeholders of the form%(atom)
expanded, followed by anewline. The available atoms are:objectname
The 40-hex object name of the object.
The type of the object (the same as
cat-file -t
reports).The size, in bytes, of the object (the same as
cat-file -s
reports).The size, in bytes, that the object takes up on disk. See thenote about on-disk sizes in the
CAVEATS
section below.If the object is stored as a delta on-disk, this expands to the40-hex sha1 of the delta base object. Otherwise, expands to thenull sha1 (40 zeroes). See
CAVEATS
below.- If this atom is used in the output string, input lines are splitat the first whitespace boundary. All characters before thatwhitespace are considered to be the object name; charactersafter that first run of whitespace (i.e., the "rest" of theline) are output in place of the
%(rest)
atom.
If no format is specified, the default format is
%(objectname)%(objecttype) %(objectsize)
.If
—batch
is specified, the object information is followed by theobject contents (consisting of%(objectsize)
bytes), followed by anewline.For example,
—batch
without a custom format would produce:- <sha1> SP <type> SP <size> LF
- <contents> LF
Whereas
—batch-check='%(objectname) %(objecttype)'
would produce:<sha1> SP <type> LF
If a name is specified on stdin that cannot be resolved to an object inthe repository, then
cat-file
will ignore any custom format and print:<object> SP missing LF
If a name is specified that might refer to more than one object (an ambiguous short sha), then
cat-file
will ignore any custom format and print:<object> SP ambiguous LF
If —follow-symlinks is used, and a symlink in the repository pointsoutside the repository, then
cat-file
will ignore any custom formatand print:symlink SP <size> LF <symlink> LF
The symlink will either be absolute (beginning with a /), or relativeto the tree root. For instance, if dir/link points to ../../foo, then<symlink> will be ../foo. <size> is the size of the symlink in bytes.
If —follow-symlinks is used, the following error messages will bedisplayed:
<object> SP missing LF
is printed when the initial symlink requested does not exist.
dangling SP <size> LF <object> LF
is printed when the initial symlink exists, but something thatit (transitive-of) points to does not.
loop SP <size> LF <object> LF
is printed for symlink loops (or any symlinks thatrequire more than 40 link resolutions to resolve).
notdir SP <size> LF <object> LF
is printed when, during symlink resolution, a file is used as adirectory name.
CAVEATS
Note that the sizes of objects on disk are reported accurately, but careshould be taken in drawing conclusions about which refs or objects areresponsible for disk usage. The size of a packed non-delta object may bemuch larger than the size of objects which delta against it, but thechoice of which object is the base and which is the delta is arbitraryand is subject to change during a repack.
Note also that multiple copies of an object may be present in the objectdatabase; in this case, it is undefined which copy’s size or delta basewill be reported.
GIT
Part of the git[1] suite