Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.42.1 → 2.47.0 no changes
- 2.42.0 08/21/23
- 2.36.1 → 2.41.2 no changes
- 2.36.0 04/18/22
- 2.30.1 → 2.35.8 no changes
- 2.30.0 12/27/20
- 2.22.1 → 2.29.3 no changes
- 2.22.0 06/07/19
- 2.14.6 → 2.21.4 no changes
- 2.13.7 05/22/18
- 2.10.5 → 2.12.5 no changes
- 2.9.5 07/30/17
- 2.1.4 → 2.8.6 no changes
- 2.0.5 12/17/14
概述
git ls-tree [-d] [-r] [-t] [-l] [-z] [--name-only] [--name-status] [--object-only] [--full-name] [--full-tree] [--abbrev[=<n>]] [--format=<格式>] <目录树对象> [<路径>…]
描述
列出给定树对象的内容,类似于当前工作目录中的 "/bin/ls -a"。 请注意:
-
行为与 "/bin/ls" 略有不同,<路径> 表示的只是要匹配的模式列表,例如,指定目录名(不含
-r
)的行为会有所不同,参数的顺序并不重要。 -
的行为类似于 "/bin/ls",因为 <路径> 是相对于当前工作目录而言的。 例如,当你在一个有目录 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>
-
树状对象 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='%(对象名)'
,但对于该选项和精确格式,命令都采用手工优化的代码路径,而不是通过通用格式化机制。 - --abbrev[=<n>]
-
不显示完整的 40 字节十六进制对象行,而是显示至少 <n> 个十六进制数字长度的最短前缀,该前缀唯一指向对象。 可以使用 --abbrev=<n> 指定非默认位数。
- --full-name
-
不显示相对于当前工作目录的路径名,而是显示完整的路径名。
- --full-tree
-
不将列表限制在当前工作目录。 暗含 --full-name.
- --format=<格式>
-
一个字符串,从显示的结果中插值出
%(字段名)
。它还将%%
插值为%
,将%xNN
插值为十六进制代码为NN
的字符;例如,将%x00
插值为\0
(NUL),将%x09
插值为\t
(TAB),将%x0a
插值为\n
(LF)。 当指定时,--format
不能与其他改变格式的选项结合使用,包括--long
、--name-only
和--object-only
。 - [<路径>…]
-
如果给出路径,则显示路径(注意这并不是真正的原始路径名,而是要匹配的模式列表)。 否则会隐式地将树的根层作为唯一的路径参数。
输出格式
ls-tree
的输出格式由 --format
选项或其他改变格式的选项(如 --name-only
等)决定(参见上文的 --format
)。
使用某些 --format
指令等同于使用这些选项,但调用完整的格式化机制可能比使用适当的格式化选项要慢。
在 --format
与现有选项完全对应的情况下,ls-tree
将使用适当的更快路径。因此,默认格式相当于:
%(对象模式) %(对象类型) %(对象名)%x09%(路径)
该输出格式与 git update-index 的 --index-info--stdin
所期望的格式兼容。
当使用 -l
选项时,格式变为
%(对象模式) %(对象类型) %(对象名) %(对象大小:padded)%x09%(路径)
<对象名> 标识的对象大小以字节为单位,右对齐,最小宽度为 7 个字符。 对象大小仅用于 blobs(文件)条目;对于其他条目,使用 -
字符代替大小。
如果没有 -z
选项,带 “不常见” 字符的路径名会被加上引号,正如配置变量 core.quotePath
所解释的那样(参见 git-config[1])。 使用 -z
选项,文件名将被逐字输出,并以 NUL 字节结束。
定制格式:
使用 --format
选项可以自定义打印格式,该选项可以使用 %(fieldname)
符号对不同字段进行插值。例如,如果只关心 “对象名” 和 “路径” 字段,可以使用特定的 "--format" 执行,如
git ls-tree --format='%(对象名) %(路径)' <树状对象>
GIT
属于 git[1] 文档