Skip to content

git-ls-tree

列出树对象的内容。

概要

txt
'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>' 被视为相对于当前工作目录。例如,当您在目录 'sub' 中且该目录有目录 'dir' 时,您可以运行 'git ls-tree -r HEAD dir' 来列出树的内容(即 HEAD 中的 sub/dir)。在这种情况下,您不想给出不在根级别的树(例如 git ls-tree -r HEAD:sub dir),因为那会导致在 HEAD 提交中请求 sub/sub/dir。但是,可以通过传递 --full-tree 选项来忽略当前工作目录。

选项

<tree-ish>

:树状对象的 ID。

-d

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

-r

:递归进入子树。

-t

:即使要递归进入子树也显示树条目。如果未传递 -r 则无效。-d 隐含 -t

-l, --long

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

-z

:以 \0 行终止输出且不引用文件名。有关更多信息,请参阅下面的输出格式。

--name-only, --name-status, --object-only

仅列出文件名(而不是 "long" 输出),每行一个。不能与 --object-only 组合使用。

--object-only

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

--abbrev[=<n>]

:显示最短的唯一引用对象的前缀(至少 '<n>' 个十六进制数字长),而不是完整的 40 字节十六进制对象行。可以通过 --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)' &lt;tree-ish&gt;

字段名称

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

objectmode

:对象的模式。

objecttype

:对象的类型(commitblobtree)。

objectname

:对象的名称。

objectsize[:padded]

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

path

:对象的路径名。

Git

git(1) 套件的一部分

基于 CC BY-NC-SA 3.0 许可发布