Autogenerated manpages for v2.44.0-rc1-15-g4fc51
[git-manpages.git] / man1 / git-cat-file.1
blobcf299f2b909bd4fd02089305cea1dc55b95c6840
1 '\" t
2 .\"     Title: git-cat-file
3 .\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
4 .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
5 .\"      Date: 2024-02-14
6 .\"    Manual: Git Manual
7 .\"    Source: Git 2.44.0.rc1.15.g4fc51f00ef
8 .\"  Language: English
9 .\"
10 .TH "GIT\-CAT\-FILE" "1" "2024\-02\-14" "Git 2\&.44\&.0\&.rc1\&.15\&.g4" "Git Manual"
11 .\" -----------------------------------------------------------------
12 .\" * Define some portability stuff
13 .\" -----------------------------------------------------------------
14 .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15 .\" http://bugs.debian.org/507673
16 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
17 .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
18 .ie \n(.g .ds Aq \(aq
19 .el       .ds Aq '
20 .\" -----------------------------------------------------------------
21 .\" * set default formatting
22 .\" -----------------------------------------------------------------
23 .\" disable hyphenation
24 .nh
25 .\" disable justification (adjust text to left margin only)
26 .ad l
27 .\" -----------------------------------------------------------------
28 .\" * MAIN CONTENT STARTS HERE *
29 .\" -----------------------------------------------------------------
30 .SH "NAME"
31 git-cat-file \- Provide contents or details of repository objects
32 .SH "SYNOPSIS"
33 .sp
34 .nf
35 \fIgit cat\-file\fR <type> <object>
36 \fIgit cat\-file\fR (\-e | \-p) <object>
37 \fIgit cat\-file\fR (\-t | \-s) [\-\-allow\-unknown\-type] <object>
38 \fIgit cat\-file\fR (\-\-textconv | \-\-filters)
39              [<rev>:<path|tree\-ish> | \-\-path=<path|tree\-ish> <rev>]
40 \fIgit cat\-file\fR (\-\-batch | \-\-batch\-check | \-\-batch\-command) [\-\-batch\-all\-objects]
41              [\-\-buffer] [\-\-follow\-symlinks] [\-\-unordered]
42              [\-\-textconv | \-\-filters] [\-Z]
43 .fi
44 .sp
45 .SH "DESCRIPTION"
46 .sp
47 Output the contents or other properties such as size, type or delta information of one or more objects\&.
48 .sp
49 This command can operate in two modes, depending on whether an option from the \fB\-\-batch\fR family is specified\&.
50 .sp
51 In non\-batch mode, the command provides information on an object named on the command line\&.
52 .sp
53 In batch mode, arguments are read from standard input\&.
54 .SH "OPTIONS"
55 .PP
56 <object>
57 .RS 4
58 The name of the object to show\&. For a more complete list of ways to spell object names, see the "SPECIFYING REVISIONS" section in
59 \fBgitrevisions\fR(7)\&.
60 .RE
61 .PP
62 \-t
63 .RS 4
64 Instead of the content, show the object type identified by
65 \fB<object>\fR\&.
66 .RE
67 .PP
68 \-s
69 .RS 4
70 Instead of the content, show the object size identified by
71 \fB<object>\fR\&. If used with
72 \fB\-\-use\-mailmap\fR
73 option, will show the size of updated object after replacing idents using the mailmap mechanism\&.
74 .RE
75 .PP
76 \-e
77 .RS 4
78 Exit with zero status if
79 \fB<object>\fR
80 exists and is a valid object\&. If
81 \fB<object>\fR
82 is of an invalid format, exit with non\-zero status and emit an error on stderr\&.
83 .RE
84 .PP
85 \-p
86 .RS 4
87 Pretty\-print the contents of
88 \fB<object>\fR
89 based on its type\&.
90 .RE
91 .PP
92 <type>
93 .RS 4
94 Typically this matches the real type of
95 \fB<object>\fR
96 but asking for a type that can trivially be dereferenced from the given
97 \fB<object>\fR
98 is also permitted\&. An example is to ask for a "tree" with
99 \fB<object>\fR
100 being a commit object that contains it, or to ask for a "blob" with
101 \fB<object>\fR
102 being a tag object that points at it\&.
105 \-\-[no\-]mailmap, \-\-[no\-]use\-mailmap
106 .RS 4
107 Use mailmap file to map author, committer and tagger names and email addresses to canonical real names and email addresses\&. See
108 \fBgit-shortlog\fR(1)\&.
111 \-\-textconv
112 .RS 4
113 Show the content as transformed by a textconv filter\&. In this case,
114 \fB<object>\fR
115 has to be of the form
116 \fB<tree\-ish>:<path>\fR, or
117 \fB:<path>\fR
118 in order to apply the filter to the content recorded in the index at
119 \fB<path>\fR\&.
122 \-\-filters
123 .RS 4
124 Show the content as converted by the filters configured in the current working tree for the given
125 \fB<path>\fR
126 (i\&.e\&. smudge filters, end\-of\-line conversion, etc)\&. In this case,
127 \fB<object>\fR
128 has to be of the form
129 \fB<tree\-ish>:<path>\fR, or
130 \fB:<path>\fR\&.
133 \-\-path=<path>
134 .RS 4
135 For use with
136 \fB\-\-textconv\fR
138 \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\&.
141 \-\-batch, \-\-batch=<format>
142 .RS 4
143 Print object information and contents for each object provided on stdin\&. May not be combined with any other options or arguments except
144 \fB\-\-textconv\fR,
145 \fB\-\-filters\fR, or
146 \fB\-\-use\-mailmap\fR\&.
148 .RS 4
149 .ie n \{\
150 \h'-04'\(bu\h'+03'\c
152 .el \{\
153 .sp -1
154 .IP \(bu 2.3
156 When used with
157 \fB\-\-textconv\fR
159 \fB\-\-filters\fR, the input lines must specify the path, separated by whitespace\&. See the section
160 \fBBATCH OUTPUT\fR
161 below for details\&.
164 .RS 4
165 .ie n \{\
166 \h'-04'\(bu\h'+03'\c
168 .el \{\
169 .sp -1
170 .IP \(bu 2.3
172 When used with
173 \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\&.
177 \-\-batch\-check, \-\-batch\-check=<format>
178 .RS 4
179 Print object information for each object provided on stdin\&. May not be combined with any other options or arguments except
180 \fB\-\-textconv\fR,
181 \fB\-\-filters\fR
183 \fB\-\-use\-mailmap\fR\&.
185 .RS 4
186 .ie n \{\
187 \h'-04'\(bu\h'+03'\c
189 .el \{\
190 .sp -1
191 .IP \(bu 2.3
193 When used with
194 \fB\-\-textconv\fR
196 \fB\-\-filters\fR, the input lines must specify the path, separated by whitespace\&. See the section
197 \fBBATCH OUTPUT\fR
198 below for details\&.
201 .RS 4
202 .ie n \{\
203 \h'-04'\(bu\h'+03'\c
205 .el \{\
206 .sp -1
207 .IP \(bu 2.3
209 When used with
210 \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\&.
214 \-\-batch\-command, \-\-batch\-command=<format>
215 .RS 4
216 Enter a command mode that reads commands and arguments from stdin\&. May only be combined with
217 \fB\-\-buffer\fR,
218 \fB\-\-textconv\fR,
219 \fB\-\-use\-mailmap\fR
221 \fB\-\-filters\fR\&.
223 .RS 4
224 .ie n \{\
225 \h'-04'\(bu\h'+03'\c
227 .el \{\
228 .sp -1
229 .IP \(bu 2.3
231 When used with
232 \fB\-\-textconv\fR
234 \fB\-\-filters\fR, the input lines must specify the path, separated by whitespace\&. See the section
235 \fBBATCH OUTPUT\fR
236 below for details\&.
239 .RS 4
240 .ie n \{\
241 \h'-04'\(bu\h'+03'\c
243 .el \{\
244 .sp -1
245 .IP \(bu 2.3
247 When used with
248 \fB\-\-use\-mailmap\fR, for commit and tag objects, the
249 \fBcontents\fR
250 command shows the identities replaced using the mailmap mechanism, while the
251 \fBinfo\fR
252 command shows the size of the object as if it actually recorded the replacement identities\&.
255 \fB\-\-batch\-command\fR
256 recognizes the following commands:
258 contents <object>
259 .RS 4
260 Print object contents for object reference
261 \fB<object>\fR\&. This corresponds to the output of
262 \fB\-\-batch\fR\&.
265 info <object>
266 .RS 4
267 Print object info for object reference
268 \fB<object>\fR\&. This corresponds to the output of
269 \fB\-\-batch\-check\fR\&.
272 flush
273 .RS 4
274 Used with
275 \fB\-\-buffer\fR
276 to execute all preceding commands that were issued since the beginning or since the last flush was issued\&. When
277 \fB\-\-buffer\fR
278 is used, no output will come until a
279 \fBflush\fR
280 is issued\&. When
281 \fB\-\-buffer\fR
282 is not used, commands are flushed each time without issuing
283 \fBflush\fR\&.
287 \-\-batch\-all\-objects
288 .RS 4
289 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
290 \fB\-\-batch\fR
292 \fB\-\-batch\-check\fR
293 be specified\&. By default, the objects are visited in order sorted by their hashes; see also
294 \fB\-\-unordered\fR
295 below\&. Objects are presented as\-is, without respecting the "replace" mechanism of
296 \fBgit-replace\fR(1)\&.
299 \-\-buffer
300 .RS 4
301 Normally batch output is flushed after each object is output, so that a process can interactively read and write from
302 \fBcat\-file\fR\&. With this option, the output uses normal stdio buffering; this is much more efficient when invoking
303 \fB\-\-batch\-check\fR
305 \fB\-\-batch\-command\fR
306 on a large number of objects\&.
309 \-\-unordered
310 .RS 4
311 When
312 \fB\-\-batch\-all\-objects\fR
313 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
314 \fB\-\-batch\fR\&. Note that
315 \fBcat\-file\fR
316 will still show each object only once, even if it is stored multiple times in the repository\&.
319 \-\-allow\-unknown\-type
320 .RS 4
321 Allow
322 \fB\-s\fR
324 \fB\-t\fR
325 to query broken/corrupt objects of unknown type\&.
328 \-\-follow\-symlinks
329 .RS 4
330 With
331 \fB\-\-batch\fR
333 \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
334 \fB/foo\fR
335 or a root\-level link to
336 \fB\&.\&./foo\fR), the portion of the link which is outside the tree will be printed\&.
338 This option does not (currently) work correctly when an object in the index is specified (e\&.g\&.
339 \fB:link\fR
340 instead of
341 \fBHEAD:link\fR) rather than one in the tree\&.
343 This option cannot (currently) be used unless
344 \fB\-\-batch\fR
346 \fB\-\-batch\-check\fR
347 is used\&.
349 For example, consider a git repository containing:
351 .if n \{\
352 .RS 4
355 f: a file containing "hello\en"
356 link: a symlink to f
357 dir/link: a symlink to \&.\&./f
358 plink: a symlink to \&.\&./f
359 alink: a symlink to /etc/passwd
361 .if n \{\
365 For a regular file
366 \fBf\fR,
367 \fBecho HEAD:f | git cat\-file \-\-batch\fR
368 would print
370 .if n \{\
371 .RS 4
374 ce013625030ba8dba906f756967f9e9ca394464a blob 6
376 .if n \{\
381 \fBecho HEAD:link | git cat\-file \-\-batch \-\-follow\-symlinks\fR
382 would print the same thing, as would
383 \fBHEAD:dir/link\fR, as they both point at
384 \fBHEAD:f\fR\&.
386 Without
387 \fB\-\-follow\-symlinks\fR, these would print data about the symlink itself\&. In the case of
388 \fBHEAD:link\fR, you would see
390 .if n \{\
391 .RS 4
394 4d1ae35ba2c8ec712fa2a379db44ad639ca277bd blob 1
396 .if n \{\
400 Both
401 \fBplink\fR
403 \fBalink\fR
404 point outside the tree, so they would respectively print:
406 .if n \{\
407 .RS 4
410 symlink 4
411 \&.\&./f
413 .if n \{\
417 .if n \{\
418 .RS 4
421 symlink 11
422 /etc/passwd
424 .if n \{\
430 .RS 4
431 Only meaningful with
432 \fB\-\-batch\fR,
433 \fB\-\-batch\-check\fR, or
434 \fB\-\-batch\-command\fR; input and output is NUL\-delimited instead of newline\-delimited\&.
438 .RS 4
439 Only meaningful with
440 \fB\-\-batch\fR,
441 \fB\-\-batch\-check\fR, or
442 \fB\-\-batch\-command\fR; input is NUL\-delimited instead of newline\-delimited\&. This option is deprecated in favor of
443 \fB\-Z\fR
444 as the output can otherwise be ambiguous\&.
446 .SH "OUTPUT"
448 If \fB\-t\fR is specified, one of the \fB<type>\fR\&.
450 If \fB\-s\fR is specified, the size of the \fB<object>\fR in bytes\&.
452 If \fB\-e\fR is specified, no output, unless the \fB<object>\fR is malformed\&.
454 If \fB\-p\fR is specified, the contents of \fB<object>\fR are pretty\-printed\&.
456 If \fB<type>\fR is specified, the raw (though uncompressed) contents of the \fB<object>\fR will be returned\&.
457 .SH "BATCH OUTPUT"
459 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\&. By default, the whole line is considered as an object, as if it were fed to \fBgit-rev-parse\fR(1)\&.
461 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\&.
463 You can specify the information shown for each object by using a custom \fB<format>\fR\&. The \fB<format>\fR is copied literally to stdout for each object, with placeholders of the form \fB%(atom)\fR expanded, followed by a newline\&. The available atoms are:
465 \fBobjectname\fR
466 .RS 4
467 The full hex representation of the object name\&.
470 \fBobjecttype\fR
471 .RS 4
472 The type of the object (the same as
473 \fBcat\-file \-t\fR
474 reports)\&.
477 \fBobjectsize\fR
478 .RS 4
479 The size, in bytes, of the object (the same as
480 \fBcat\-file \-s\fR
481 reports)\&.
484 \fBobjectsize:disk\fR
485 .RS 4
486 The size, in bytes, that the object takes up on disk\&. See the note about on\-disk sizes in the
487 \fBCAVEATS\fR
488 section below\&.
491 \fBdeltabase\fR
492 .RS 4
493 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
494 \fBCAVEATS\fR
495 below\&.
498 \fBrest\fR
499 .RS 4
500 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
501 \fB%(rest)\fR
502 atom\&.
505 If no format is specified, the default format is \fB%(objectname) %(objecttype) %(objectsize)\fR\&.
507 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%(objectsize)\fR bytes), followed by a newline\&.
509 For example, \fB\-\-batch\fR without a custom format would produce:
511 .if n \{\
512 .RS 4
515 <oid> SP <type> SP <size> LF
516 <contents> LF
518 .if n \{\
523 Whereas \fB\-\-batch\-check=\*(Aq%(objectname) %(objecttype)\*(Aq\fR would produce:
525 .if n \{\
526 .RS 4
529 <oid> SP <type> LF
531 .if n \{\
536 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:
538 .if n \{\
539 .RS 4
542 <object> SP missing LF
544 .if n \{\
549 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:
551 .if n \{\
552 .RS 4
555 <object> SP ambiguous LF
557 .if n \{\
562 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:
564 .if n \{\
565 .RS 4
568 symlink SP <size> LF
569 <symlink> LF
571 .if n \{\
576 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\&.\&./\&.\&./foo\fR, then \fB<symlink>\fR will be \fB\&.\&./foo\fR\&. \fB<size>\fR is the size of the symlink in bytes\&.
578 If \fB\-\-follow\-symlinks\fR is used, the following error messages will be displayed:
580 .if n \{\
581 .RS 4
584 <object> SP missing LF
586 .if n \{\
591 is printed when the initial symlink requested does not exist\&.
593 .if n \{\
594 .RS 4
597 dangling SP <size> LF
598 <object> LF
600 .if n \{\
605 is printed when the initial symlink exists, but something that it (transitive\-of) points to does not\&.
607 .if n \{\
608 .RS 4
611 loop SP <size> LF
612 <object> LF
614 .if n \{\
619 is printed for symlink loops (or any symlinks that require more than 40 link resolutions to resolve)\&.
621 .if n \{\
622 .RS 4
625 notdir SP <size> LF
626 <object> LF
628 .if n \{\
633 is printed when, during symlink resolution, a file is used as a directory name\&.
635 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\&.
636 .SH "CAVEATS"
638 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\&.
640 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\&.
641 .SH "GIT"
643 Part of the \fBgit\fR(1) suite