The output format of ls-tree is determined by either the --format
option, or other format-altering options such as --name-only etc.
(see --format above).
The use of certain --format directives is equivalent to using those
options, but invoking the full formatting machinery can be slower than
using an appropriate formatting option.
In cases where the --format would exactly map to an existing option
ls-tree will use the appropriate faster path. Thus the default format
is equivalent to:
%(objectmode) %(objecttype) %(objectname)%x09%(path)
This output format is compatible with what --index-info --stdin of
git update-index expects.
When the -l option is used, format changes to
%(objectmode) %(objecttype) %(objectname) %(objectsize:padded)%x09%(path)
Object size identified by <objectname> is given in bytes, and right-justified
with minimum width of 7 characters. Object size is given only for blobs
(file) entries; for other entries - character is used in place of size.
Without the -z option, pathnames with "unusual" characters are
quoted as explained for the configuration variable core.quotePath
(see git-config(1)). Using -z the filename is output
verbatim and the line is terminated by a NUL byte.
It is possible to print in a custom format by using the --format option,
which is able to interpolate different fields using a %(fieldname) notation.
For example, if you only care about the "objectname" and "path" fields, you
can execute with a specific "--format" like
git ls-tree --format='%(objectname) %(path)' <tree-ish>