简体中文 ▾ 主题 ▾ 最新版本 ▾ git-ls-tree 最后更新于 2.42.0

名称

git-ls-tree - 列出树对象的内容

概要

git ls-tree [-d] [-r] [-t] [-l] [-z]
	    [--name-only] [--name-status] [--object-only] [--full-name] [--full-tree] [--abbrev[=<n>]] [--format=<format>]
	    <tree-ish> [<path>…​]

描述

列出给定树对象的内容,类似于“/bin/ls -a”在当前工作目录中的作用。请注意,

  • 其行为与“/bin/ls”略有不同,因为<path>仅表示要匹配的模式列表,例如,指定目录名(不带-r)的行为将有所不同,并且参数的顺序无关紧要。

  • 其行为与“/bin/ls”类似,<path>被视为相对于当前工作目录。例如,当你在一个包含目录dir的目录sub中时,你可以运行git ls-tree -r HEAD dir来列出树(即HEAD中的sub/dir)的内容。在这种情况下,你不想指定一个不在根级别的树(例如git ls-tree -r HEAD:sub dir),因为那会导致请求HEAD提交中的sub/sub/dir。但是,可以通过传递--full-tree选项来忽略当前工作目录。

选项

<tree-ish>

tree-ish 的 ID。

-d

仅显示命名的树条目本身,而不显示其子条目。

-r

递归进入子树。

-t

即使在递归时也显示树条目。如果未传递-r则无效。-d隐含-t

-l
--long

显示 blob(文件)条目的大小。

-z

输出时以 \0 终止行且不引用文件名。更多信息请参见下面的输出格式。

--name-only
--name-status

仅列出文件名(而不是“长”输出),每行一个。不能与--object-only结合使用。

--object-only

仅列出对象名称,每行一个。不能与--name-only--name-status结合使用。这等同于指定--format='%(objectname),但对于此选项和该精确格式,命令都采用手动优化的代码路径,而不是通过通用格式化机制。

--abbrev[=<n>]

不显示完整的 40 字节十六进制对象行,而是显示唯一引用该对象的最短前缀,该前缀至少有 <n> 个十六进制数字长。非默认位数可以通过 --abbrev=<n> 指定。

--full-name

不显示相对于当前工作目录的路径名,而是显示完整的路径名。

--full-tree

不限制列表到当前工作目录。隐含 --full-name。

--format=<format>

一个字符串,它将显示结果中的%(fieldname)进行插值。它还将%%插值为%,以及将%xNN(其中NN是十六进制数字)插值为十六进制代码为NN的字符;例如%x00插值为\0 (NUL),%x09插值为\t (TAB),%x0a插值为\n (LF)。指定此选项时,--format不能与其他改变格式的选项(包括--long--name-only--object-only)结合使用。

[<path>…​]

给定路径时,显示它们(请注意,这并非真正的原始路径名,而是要匹配的模式列表)。否则,默认使用树的根级别作为唯一的路径参数。

输出格式

ls-tree 的输出格式由--format选项或其他改变格式的选项(例如--name-only等)决定(参见上面关于--format的部分)。

使用某些--format指令等同于使用那些选项,但调用完整的格式化机制可能比使用适当的格式化选项更慢。

--format将完全映射到现有选项的情况下,ls-tree将使用适当的更快路径。因此,默认格式等同于

%(objectmode) %(objecttype) %(objectname)%x09%(path)

此输出格式与git update-index--index-info --stdin所期望的兼容。

当使用-l选项时,格式变为

%(objectmode) %(objecttype) %(objectname) %(objectsize:padded)%x09%(path)

由 <objectname> 标识的对象大小以字节为单位给出,并右对齐,最小宽度为 7 个字符。对象大小仅针对 blob(文件)条目给出;对于其他条目,使用-字符代替大小。

不带-z选项时,带有“不寻常”字符的路径名将按照配置变量core.quotePath的解释进行引用(参见git-config[1])。使用-z时,文件名将原样输出,行以 NUL 字节终止。

自定义格式

可以通过使用--format选项以自定义格式打印,该选项能够使用%(fieldname)表示法插值不同的字段。例如,如果你只关心“objectname”和“path”字段,你可以使用特定的“--format”执行,例如

git ls-tree --format='%(objectname) %(path)' <tree-ish>

字段名称

结构化字段中的各种值可以用于插值到结果输出中。对于每行输出,可以使用以下名称

objectmode

对象的模式。

objecttype

对象的类型(commitblobtree)。

objectname

对象的名称。

objectsize[:padded]

blob 对象的大小(如果是committree则为“-”)。它还支持带填充大小的格式“%(objectsize:padded)”。

path

对象的路径名。

GIT

Git[1] 套件的一部分

scroll-to-top