'\" t
.\"     Title: git-cat-file
.\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
.\"      Date: 2025-11-16
.\"    Manual: Git Manual
.\"    Source: Git 2.52.0.rc2.22.gc93f1a0fa3
.\"  Language: English
.\"
.TH "GIT\-CAT\-FILE" "1" "2025-11-16" "Git 2\&.52\&.0\&.rc2\&.22\&.gc" "Git Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
git-cat-file \- Provide contents or details of repository objects
.SH "SYNOPSIS"
.sp
.nf
\fIgit cat\-file\fR <type> <object>
\fIgit cat\-file\fR (\-e | \-p | \-t | \-s) <object>
\fIgit cat\-file\fR (\-\-textconv | \-\-filters)
             [<rev>:<path|tree\-ish> | \-\-path=<path|tree\-ish> <rev>]
\fIgit cat\-file\fR (\-\-batch | \-\-batch\-check | \-\-batch\-command) [\-\-batch\-all\-objects]
             [\-\-buffer] [\-\-follow\-symlinks] [\-\-unordered]
             [\-\-textconv | \-\-filters] [\-Z]
.fi
.SH "DESCRIPTION"
.sp
Output the contents or other properties such as size, type or delta information of one or more objects\&.
.sp
This command can operate in two modes, depending on whether an option from the \fB\-\-batch\fR family is specified\&.
.sp
In non\-batch mode, the command provides information on an object named on the command line\&.
.sp
In batch mode, arguments are read from standard input\&.
.SH "OPTIONS"
.PP
<object>
.RS 4
The name of the object to show\&. For a more complete list of ways to spell object names, see the "SPECIFYING REVISIONS" section in
\fBgitrevisions\fR(7)\&.
.RE
.PP
\-t
.RS 4
Instead of the content, show the object type identified by
\fI<object>\fR\&.
.RE
.PP
\-s
.RS 4
Instead of the content, show the object size identified by
\fI<object>\fR\&. If used with
\fB\-\-use\-mailmap\fR
option, will show the size of updated object after replacing idents using the mailmap mechanism\&.
.RE
.PP
\-e
.RS 4
Exit with zero status if
\fI<object>\fR
exists and is a valid object\&. If
\fI<object>\fR
is of an invalid format, exit with non\-zero status and emit an error on stderr\&.
.RE
.PP
\-p
.RS 4
Pretty\-print the contents of
\fI<object>\fR
based on its type\&.
.RE
.PP
<type>
.RS 4
Typically this matches the real type of
\fI<object>\fR
but asking for a type that can trivially be dereferenced from the given
\fI<object>\fR
is also permitted\&. An example is to ask for a "tree" with
\fI<object>\fR
being a commit object that contains it, or to ask for a "blob" with
\fI<object>\fR
being a tag object that points at it\&.
.RE
.PP
\-\-mailmap, \-\-no\-mailmap, \-\-use\-mailmap, \-\-no\-use\-mailmap
.RS 4
Use mailmap file to map author, committer and tagger names and email addresses to canonical real names and email addresses\&. See
\fBgit-shortlog\fR(1)\&.
.RE
.PP
\-\-textconv
.RS 4
Show the content as transformed by a textconv filter\&. In this case,
\fI<object>\fR
has to be of the form
\fI<tree\-ish>\fR\fB:\fR\fI<path>\fR, or
\fB:\fR\fI<path>\fR
in order to apply the filter to the content recorded in the index at
\fI<path>\fR\&.
.RE
.PP
\-\-filters
.RS 4
Show the content as converted by the filters configured in the current working tree for the given
\fI<path>\fR
(i\&.e\&. smudge filters, end\-of\-line conversion, etc)\&. In this case,
\fI<object>\fR
has to be of the form
\fI<tree\-ish>\fR\fB:\fR\fI<path>\fR, or
\fB:\fR\fI<path>\fR\&.
.RE
.PP
\-\-filter=<filter\-spec>, \-\-no\-filter
.RS 4
Omit objects from the list of printed objects\&. This can only be used in combination with one of the batched modes\&. Excluded objects that have been explicitly requested via any of the batch modes that read objects via standard input (\fB\-\-batch\fR,
\fB\-\-batch\-check\fR) will be reported as "filtered"\&. Excluded objects in
\fB\-\-batch\-all\-objects\fR
mode will not be printed at all\&. The
\fI<filter\-spec>\fR
may be one of the following:
.sp
The form
\fI\-\-filter=blob:none\fR
omits all blobs\&.
.sp
The form
\fI\-\-filter=blob:limit=<n>[kmg]\fR
omits blobs of size at least n bytes or units\&. n may be zero\&. The suffixes k, m, and g can be used to name units in KiB, MiB, or GiB\&. For example,
\fIblob:limit=1k\fR
is the same as
\fIblob:limit=1024\fR\&.
.sp
The form
\fI\-\-filter=object:type=(tag|commit|tree|blob)\fR
omits all objects which are not of the requested type\&.
.RE
.PP
\-\-path=<path>
.RS 4
For use with
\fB\-\-textconv\fR
or
\fB\-\-filters\fR, to allow specifying an object name and a path separately, e\&.g\&. when it is difficult to figure out the revision from which the blob came\&.
.RE
.PP
\-\-batch, \-\-batch=<format>
.RS 4
Print object information and contents for each object provided on stdin\&. May not be combined with any other options or arguments except
\fB\-\-textconv\fR,
\fB\-\-filters\fR, or
\fB\-\-use\-mailmap\fR\&.
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
When used with
\fB\-\-textconv\fR
or
\fB\-\-filters\fR, the input lines must specify the path, separated by whitespace\&. See the section
\fBBATCH\fR
\fBOUTPUT\fR
below for details\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
When used with
\fB\-\-use\-mailmap\fR, for commit and tag objects, the contents part of the output shows the identities replaced using the mailmap mechanism, while the information part of the output shows the size of the object as if it actually recorded the replacement identities\&.
.RE
.RE
.PP
\-\-batch\-check, \-\-batch\-check=<format>
.RS 4
Print object information for each object provided on stdin\&. May not be combined with any other options or arguments except
\fB\-\-textconv\fR,
\fB\-\-filters\fR
or
\fB\-\-use\-mailmap\fR\&.
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
When used with
\fB\-\-textconv\fR
or
\fB\-\-filters\fR, the input lines must specify the path, separated by whitespace\&. See the section
\fBBATCH\fR
\fBOUTPUT\fR
below for details\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
When used with
\fB\-\-use\-mailmap\fR, for commit and tag objects, the printed object information shows the size of the object as if the identities recorded in it were replaced by the mailmap mechanism\&.
.RE
.RE
.PP
\-\-batch\-command, \-\-batch\-command=<format>
.RS 4
Enter a command mode that reads commands and arguments from stdin\&. May only be combined with
\fB\-\-buffer\fR,
\fB\-\-textconv\fR,
\fB\-\-use\-mailmap\fR
or
\fB\-\-filters\fR\&.
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
When used with
\fB\-\-textconv\fR
or
\fB\-\-filters\fR, the input lines must specify the path, separated by whitespace\&. See the section
\fBBATCH\fR
\fBOUTPUT\fR
below for details\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
When used with
\fB\-\-use\-mailmap\fR, for commit and tag objects, the
\fBcontents\fR
command shows the identities replaced using the mailmap mechanism, while the
\fBinfo\fR
command shows the size of the object as if it actually recorded the replacement identities\&.
.RE
.sp
\fB\-\-batch\-command\fR
recognizes the following commands:
.PP
contents <object>
.RS 4
Print object contents for object reference
\fI<object>\fR\&. This corresponds to the output of
\fB\-\-batch\fR\&.
.RE
.PP
info <object>
.RS 4
Print object info for object reference
\fI<object>\fR\&. This corresponds to the output of
\fB\-\-batch\-check\fR\&.
.RE
.PP
flush
.RS 4
Used with
\fB\-\-buffer\fR
to execute all preceding commands that were issued since the beginning or since the last flush was issued\&. When
\fB\-\-buffer\fR
is used, no output will come until a
\fBflush\fR
is issued\&. When
\fB\-\-buffer\fR
is not used, commands are flushed each time without issuing
\fBflush\fR\&.
.RE
.RE
.PP
\-\-batch\-all\-objects
.RS 4
Instead of reading a list of objects on stdin, perform the requested batch operation on all objects in the repository and any alternate object stores (not just reachable objects)\&. Requires
\fB\-\-batch\fR
or
\fB\-\-batch\-check\fR
be specified\&. By default, the objects are visited in order sorted by their hashes; see also
\fB\-\-unordered\fR
below\&. Objects are presented as\-is, without respecting the "replace" mechanism of
\fBgit-replace\fR(1)\&.
.RE
.PP
\-\-buffer
.RS 4
Normally batch output is flushed after each object is output, so that a process can interactively read and write from
\fBcat\-file\fR\&. With this option, the output uses normal stdio buffering; this is much more efficient when invoking
\fB\-\-batch\-check\fR
or
\fB\-\-batch\-command\fR
on a large number of objects\&.
.RE
.PP
\-\-unordered
.RS 4
When
\fB\-\-batch\-all\-objects\fR
is in use, visit objects in an order which may be more efficient for accessing the object contents than hash order\&. The exact details of the order are unspecified, but if you do not require a specific order, this should generally result in faster output, especially with
\fB\-\-batch\fR\&. Note that
\fBcat\-file\fR
will still show each object only once, even if it is stored multiple times in the repository\&.
.RE
.PP
\-\-follow\-symlinks
.RS 4
With
\fB\-\-batch\fR
or
\fB\-\-batch\-check\fR, follow symlinks inside the repository when requesting objects with extended SHA\-1 expressions of the form tree\-ish:path\-in\-tree\&. Instead of providing output about the link itself, provide output about the linked\-to object\&. If a symlink points outside the tree\-ish (e\&.g\&. a link to
\fB/foo\fR
or a root\-level link to
\fB\&.\&.\fR\fB/foo\fR), the portion of the link which is outside the tree will be printed\&.
.sp
This option does not (currently) work correctly when an object in the index is specified (e\&.g\&.
\fB:link\fR
instead of
\fBHEAD:link\fR) rather than one in the tree\&.
.sp
This option cannot (currently) be used unless
\fB\-\-batch\fR
or
\fB\-\-batch\-check\fR
is used\&.
.sp
For example, consider a git repository containing:
.sp
.if n \{\
.RS 4
.\}
.nf
f: a file containing "hello\en"
link: a symlink to f
dir/link: a symlink to \&.\&./f
plink: a symlink to \&.\&./f
alink: a symlink to /etc/passwd
.fi
.if n \{\
.RE
.\}
.sp
For a regular file
\fBf\fR,
\fBecho\fR
\fBHEAD:f\fR
|
\fBgit\fR
\fBcat\-file\fR
\fB\-\-batch\fR
would print
.sp
.if n \{\
.RS 4
.\}
.nf
ce013625030ba8dba906f756967f9e9ca394464a blob 6
.fi
.if n \{\
.RE
.\}
.sp
And
\fBecho\fR
\fBHEAD:link\fR
|
\fBgit\fR
\fBcat\-file\fR
\fB\-\-batch\fR
\fB\-\-follow\-symlinks\fR
would print the same thing, as would
\fBHEAD:dir/link\fR, as they both point at
\fBHEAD:f\fR\&.
.sp
Without
\fB\-\-follow\-symlinks\fR, these would print data about the symlink itself\&. In the case of
\fBHEAD:link\fR, you would see
.sp
.if n \{\
.RS 4
.\}
.nf
4d1ae35ba2c8ec712fa2a379db44ad639ca277bd blob 1
.fi
.if n \{\
.RE
.\}
.sp
Both
\fBplink\fR
and
\fBalink\fR
point outside the tree, so they would respectively print:
.sp
.if n \{\
.RS 4
.\}
.nf
symlink 4
\&.\&./f
.fi
.if n \{\
.RE
.\}
.sp
.if n \{\
.RS 4
.\}
.nf
symlink 11
/etc/passwd
.fi
.if n \{\
.RE
.\}
.RE
.PP
\-Z
.RS 4
Only meaningful with
\fB\-\-batch\fR,
\fB\-\-batch\-check\fR, or
\fB\-\-batch\-command\fR; input and output is NUL\-delimited instead of newline\-delimited\&.
.RE
.PP
\-z
.RS 4
Only meaningful with
\fB\-\-batch\fR,
\fB\-\-batch\-check\fR, or
\fB\-\-batch\-command\fR; input is NUL\-delimited instead of newline\-delimited\&. This option is deprecated in favor of
\fB\-Z\fR
as the output can otherwise be ambiguous\&.
.RE
.SH "OUTPUT"
.sp
If \fB\-t\fR is specified, one of the \fI<type>\fR\&.
.sp
If \fB\-s\fR is specified, the size of the \fI<object>\fR in bytes\&.
.sp
If \fB\-e\fR is specified, no output, unless the \fI<object>\fR is malformed\&.
.sp
If \fB\-p\fR is specified, the contents of \fI<object>\fR are pretty\-printed\&.
.sp
If \fI<type>\fR is specified, the raw (though uncompressed) contents of the \fI<object>\fR will be returned\&.
.SH "BATCH OUTPUT"
.sp
If \fB\-\-batch\fR or \fB\-\-batch\-check\fR is given, \fBcat\-file\fR will read objects from stdin, one per line, and print information about them in the same order as they have been read\&. By default, the whole line is considered as an object, as if it were fed to \fBgit-rev-parse\fR(1)\&.
.sp
When \fB\-\-batch\-command\fR is given, \fBcat\-file\fR will read commands from stdin, one per line, and print information based on the command given\&. With \fB\-\-batch\-command\fR, the \fBinfo\fR command followed by an object will print information about the object the same way \fB\-\-batch\-check\fR would, and the \fBcontents\fR command followed by an object prints contents in the same way \fB\-\-batch\fR would\&.
.sp
You can specify the information shown for each object by using a custom \fI<format>\fR\&. The \fI<format>\fR is copied literally to stdout for each object, with placeholders of the form \fB%\fR(\fBatom\fR) expanded, followed by a newline\&. The available atoms are:
.PP
\fBobjectname\fR
.RS 4
The full hex representation of the object name\&.
.RE
.PP
\fBobjecttype\fR
.RS 4
The type of the object (the same as
\fBcat\-file\fR
\fB\-t\fR
reports)\&.
.RE
.PP
\fBobjectmode\fR
.RS 4
If the specified object has mode information (such as a tree or index entry), the mode expressed as an octal integer\&. Otherwise, empty string\&.
.RE
.PP
\fBobjectsize\fR
.RS 4
The size, in bytes, of the object (the same as
\fBcat\-file\fR
\fB\-s\fR
reports)\&.
.RE
.PP
\fBobjectsize:disk\fR
.RS 4
The size, in bytes, that the object takes up on disk\&. See the note about on\-disk sizes in the
\fBCAVEATS\fR
section below\&.
.RE
.PP
\fBdeltabase\fR
.RS 4
If the object is stored as a delta on\-disk, this expands to the full hex representation of the delta base object name\&. Otherwise, expands to the null OID (all zeroes)\&. See
\fBCAVEATS\fR
below\&.
.RE
.PP
\fBrest\fR
.RS 4
If this atom is used in the output string, input lines are split at the first whitespace boundary\&. All characters before that whitespace are considered to be the object name; characters after that first run of whitespace (i\&.e\&., the "rest" of the line) are output in place of the
\fB%\fR(\fBrest\fR) atom\&.
.RE
.sp
If no format is specified, the default format is \fB%\fR(\fBobjectname\fR) \fB%\fR(\fBobjecttype\fR) \fB%\fR(\fBobjectsize\fR)\&.
.sp
If \fB\-\-batch\fR is specified, or if \fB\-\-batch\-command\fR is used with the \fBcontents\fR command, the object information is followed by the object contents (consisting of \fB%\fR(\fBobjectsize\fR) bytes), followed by a newline\&.
.sp
For example, \fB\-\-batch\fR without a custom format would produce:
.sp
.if n \{\
.RS 4
.\}
.nf
<oid> SP <type> SP <size> LF
<contents> LF
.fi
.if n \{\
.RE
.\}
.sp
Whereas \fB\-\-batch\-check=\fR\*(Aq%(\fBobjectname\fR) \fB%\fR(\fBobjecttype\fR)\*(Aq would produce:
.sp
.if n \{\
.RS 4
.\}
.nf
<oid> SP <type> LF
.fi
.if n \{\
.RE
.\}
.sp
If a name is specified on stdin that cannot be resolved to an object in the repository, then \fBcat\-file\fR will ignore any custom format and print:
.sp
.if n \{\
.RS 4
.\}
.nf
<object> SP missing LF
.fi
.if n \{\
.RE
.\}
.sp
If a name is specified on stdin that is filtered out via \fB\-\-filter=\fR, then \fBcat\-file\fR will ignore any custom format and print:
.sp
.if n \{\
.RS 4
.\}
.nf
<object> SP excluded LF
.fi
.if n \{\
.RE
.\}
.sp
If a name is specified that might refer to more than one object (an ambiguous short sha), then \fBcat\-file\fR will ignore any custom format and print:
.sp
.if n \{\
.RS 4
.\}
.nf
<object> SP ambiguous LF
.fi
.if n \{\
.RE
.\}
.sp
If a name is specified that refers to a submodule entry in a tree and the target object does not exist in the repository, then \fBcat\-file\fR will ignore any custom format and print (with the object ID of the submodule):
.sp
.if n \{\
.RS 4
.\}
.nf
<oid> SP submodule LF
.fi
.if n \{\
.RE
.\}
.sp
If \fB\-\-follow\-symlinks\fR is used, and a symlink in the repository points outside the repository, then \fBcat\-file\fR will ignore any custom format and print:
.sp
.if n \{\
.RS 4
.\}
.nf
symlink SP <size> LF
<symlink> LF
.fi
.if n \{\
.RE
.\}
.sp
The symlink will either be absolute (beginning with a \fB/\fR), or relative to the tree root\&. For instance, if dir/link points to \fB\&.\&.\fR\fB/\fR\fB\&.\&.\fR\fB/foo\fR, then \fI<symlink>\fR will be \fB\&.\&.\fR\fB/foo\fR\&. \fI<size>\fR is the size of the symlink in bytes\&.
.sp
If \fB\-\-follow\-symlinks\fR is used, the following error messages will be displayed:
.sp
.if n \{\
.RS 4
.\}
.nf
<object> SP missing LF
.fi
.if n \{\
.RE
.\}
.sp
is printed when the initial symlink requested does not exist\&.
.sp
.if n \{\
.RS 4
.\}
.nf
dangling SP <size> LF
<object> LF
.fi
.if n \{\
.RE
.\}
.sp
is printed when the initial symlink exists, but something that it (transitive\-of) points to does not\&.
.sp
.if n \{\
.RS 4
.\}
.nf
loop SP <size> LF
<object> LF
.fi
.if n \{\
.RE
.\}
.sp
is printed for symlink loops (or any symlinks that require more than 40 link resolutions to resolve)\&.
.sp
.if n \{\
.RS 4
.\}
.nf
notdir SP <size> LF
<object> LF
.fi
.if n \{\
.RE
.\}
.sp
is printed when, during symlink resolution, a file is used as a directory name\&.
.sp
Alternatively, when \fB\-Z\fR is passed, the line feeds in any of the above examples are replaced with NUL terminators\&. This ensures that output will be parsable if the output itself would contain a linefeed and is thus recommended for scripting purposes\&.
.SH "CAVEATS"
.sp
Note that the sizes of objects on disk are reported accurately, but care should be taken in drawing conclusions about which refs or objects are responsible for disk usage\&. The size of a packed non\-delta object may be much larger than the size of objects which delta against it, but the choice of which object is the base and which is the delta is arbitrary and is subject to change during a repack\&.
.sp
Note also that multiple copies of an object may be present in the object database; in this case, it is undefined which copy\(cqs size or delta base will be reported\&.
.SH "GIT"
.sp
Part of the \fBgit\fR(1) suite
