1GIT-LS-TREE(1) Git Manual GIT-LS-TREE(1)
2
3
4
6 git-ls-tree - List the contents of a tree object
7
9 git ls-tree [-d] [-r] [-t] [-l] [-z]
10 [--name-only] [--name-status] [--object-only] [--full-name] [--full-tree] [--abbrev[=<n>]] [--format=<format>]
11 <tree-ish> [<path>...]
12
14 Lists the contents of a given tree object, like what "/bin/ls -a" does
15 in the current working directory. Note that:
16
17 • the behaviour is slightly different from that of "/bin/ls" in that
18 the <path> denotes just a list of patterns to match, e.g. so
19 specifying directory name (without -r) will behave differently, and
20 order of the arguments does not matter.
21
22 • the behaviour is similar to that of "/bin/ls" in that the <path> is
23 taken as relative to the current working directory. E.g. when you
24 are in a directory sub that has a directory dir, you can run git
25 ls-tree -r HEAD dir to list the contents of the tree (that is
26 sub/dir in HEAD). You don’t want to give a tree that is not at the
27 root level (e.g. git ls-tree -r HEAD:sub dir) in this case, as
28 that would result in asking for sub/sub/dir in the HEAD commit.
29 However, the current working directory can be ignored by passing
30 --full-tree option.
31
33 <tree-ish>
34 Id of a tree-ish.
35
36 -d
37 Show only the named tree entry itself, not its children.
38
39 -r
40 Recurse into sub-trees.
41
42 -t
43 Show tree entries even when going to recurse them. Has no effect if
44 -r was not passed. -d implies -t.
45
46 -l, --long
47 Show object size of blob (file) entries.
48
49 -z
50 \0 line termination on output and do not quote filenames. See
51 OUTPUT FORMAT below for more information.
52
53 --name-only, --name-status
54 List only filenames (instead of the "long" output), one per line.
55 Cannot be combined with --object-only.
56
57 --object-only
58 List only names of the objects, one per line. Cannot be combined
59 with --name-only or --name-status. This is equivalent to specifying
60 --format='%(objectname)', but for both this option and that exact
61 format the command takes a hand-optimized codepath instead of going
62 through the generic formatting mechanism.
63
64 --abbrev[=<n>]
65 Instead of showing the full 40-byte hexadecimal object lines, show
66 the shortest prefix that is at least <n> hexdigits long that
67 uniquely refers the object. Non default number of digits can be
68 specified with --abbrev=<n>.
69
70 --full-name
71 Instead of showing the path names relative to the current working
72 directory, show the full path names.
73
74 --full-tree
75 Do not limit the listing to the current working directory. Implies
76 --full-name.
77
78 --format=<format>
79 A string that interpolates %(fieldname) from the result being
80 shown. It also interpolates %% to %, and %xx where xx are hex
81 digits interpolates to character with hex code xx; for example %00
82 interpolates to \0 (NUL), %09 to \t (TAB) and %0a to \n (LF). When
83 specified, --format cannot be combined with other format-altering
84 options, including --long, --name-only and --object-only.
85
86 [<path>...]
87 When paths are given, show them (note that this isn’t really raw
88 pathnames, but rather a list of patterns to match). Otherwise
89 implicitly uses the root level of the tree as the sole path
90 argument.
91
93 The output format of ls-tree is determined by either the --format
94 option, or other format-altering options such as --name-only etc. (see
95 --format above).
96
97 The use of certain --format directives is equivalent to using those
98 options, but invoking the full formatting machinery can be slower than
99 using an appropriate formatting option.
100
101 In cases where the --format would exactly map to an existing option
102 ls-tree will use the appropriate faster path. Thus the default format
103 is equivalent to:
104
105 %(objectmode) %(objecttype) %(objectname)%x09%(path)
106
107 This output format is compatible with what --index-info --stdin of git
108 update-index expects.
109
110 When the -l option is used, format changes to
111
112 %(objectmode) %(objecttype) %(objectname) %(objectsize:padded)%x09%(path)
113
114 Object size identified by <objectname> is given in bytes, and
115 right-justified with minimum width of 7 characters. Object size is
116 given only for blobs (file) entries; for other entries - character is
117 used in place of size.
118
119 Without the -z option, pathnames with "unusual" characters are quoted
120 as explained for the configuration variable core.quotePath (see git-
121 config(1)). Using -z the filename is output verbatim and the line is
122 terminated by a NUL byte.
123
124 Customized format:
125
126 It is possible to print in a custom format by using the --format
127 option, which is able to interpolate different fields using a
128 %(fieldname) notation. For example, if you only care about the
129 "objectname" and "path" fields, you can execute with a specific
130 "--format" like
131
132 git ls-tree --format='%(objectname) %(path)' <tree-ish>
133
135 Various values from structured fields can be used to interpolate into
136 the resulting output. For each outputing line, the following names can
137 be used:
138
139 objectmode
140 The mode of the object.
141
142 objecttype
143 The type of the object (commit, blob or tree).
144
145 objectname
146 The name of the object.
147
148 objectsize[:padded]
149 The size of a blob object ("-" if it’s a commit or tree). It also
150 supports a padded format of size with "%(objectsize:padded)".
151
152 path
153 The pathname of the object.
154
156 Part of the git(1) suite
157
158
159
160Git 2.36.1 2022-05-05 GIT-LS-TREE(1)