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