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

名称

git-ls-files - 显示索引和工作树中的文件信息

概要

git ls-files [-z] [-t] [-v] [-f]
		[-c|--cached] [-d|--deleted] [-o|--others] [-i|--ignored]
		[-s|--stage] [-u|--unmerged] [-k|--killed] [-m|--modified]
		[--resolve-undo]
		[--directory [--no-empty-directory]] [--eol]
		[--deduplicate]
		[-x <pattern>|--exclude=<pattern>]
		[-X <file>|--exclude-from=<file>]
		[--exclude-per-directory=<file>]
		[--exclude-standard]
		[--error-unmatch] [--with-tree=<tree-ish>]
		[--full-name] [--recurse-submodules]
		[--abbrev[=<n>]] [--format=<format>] [--] [<file>…​]

描述

此命令将索引中的文件列表与实际工作目录列表合并,并显示两者的不同组合。

可以使用多个标志来确定显示哪些文件,如果索引中有多个条目,或者相关文件选择选项适用多种状态,则每个文件可能会被打印多次。

选项

-c
--cached

显示 Git 索引中缓存的所有文件,即所有被跟踪的文件。(如果未指定 -c/-s/-d/-o/-u/-k/-m/--resolve-undo 选项,则这是默认设置。)

-d
--deleted

显示有未暂存删除的文件

-m
--modified

显示有未暂存修改的文件(请注意,未暂存的删除也算作未暂存的修改)

-o
--others

在输出中显示其他(即未跟踪的)文件

-i
--ignored

仅在输出中显示被忽略的文件。必须与显式的 * -c * 或 * -o * 一起使用。当显示索引中的文件时(即与 * -c * 一起使用时),只打印与排除模式匹配的文件。当显示“其他”文件时(即与 * -o * 一起使用时),只显示与排除模式匹配的文件。标准忽略规则不会自动激活;因此,至少需要一个 --exclude* 选项。

-s
--stage

在输出中显示暂存内容的模式位、对象名称和阶段编号。

--directory

如果整个目录被归类为“其他”,则仅显示其名称(带尾随斜杠),而不显示其全部内容。没有 -o/--others 则无效。

--no-empty-directory

不列出空目录。没有 --directory 则无效。

-u
--unmerged

在输出中显示有关未合并文件的信息,但不要显示任何其他跟踪文件(强制使用 --stage,覆盖 --cached)。

-k
--killed

显示文件系统中需要删除的未跟踪文件,因为文件/目录冲突导致无法将跟踪文件写入文件系统。

--resolve-undo

显示索引中包含解析撤销信息的文件及其解析撤销信息。(解析撤销信息用于实现“git checkout -m $PATH”,即重新创建意外解决的合并冲突)

-z

输出以 \0 字符终止,并且不引用文件名。有关更多信息,请参阅下面的 OUTPUT。

--deduplicate

当只显示文件名时,抑制可能由于合并期间存在多个阶段,或同时指定 --deleted--modified 选项而产生的重复项。当使用 -t--unmerged--stage 选项中的任何一个时,此选项无效。

-x <模式>
--exclude=<模式>

跳过与模式匹配的未跟踪文件。请注意,模式是 shell 通配符模式。有关更多信息,请参阅下面的 EXCLUDE PATTERNS。

-X <文件>
--exclude-from=<文件>

从 <文件> 读取排除模式;每行一个。

--exclude-per-directory=<文件>

读取仅适用于 <文件> 中目录及其子目录的额外排除模式。如果您尝试模仿 Porcelain 命令的工作方式,使用 --exclude-standard 选项会更容易和更彻底。

--exclude-standard

添加标准 Git 排除项:.git/info/exclude,每个目录中的 .gitignore,以及用户的全局排除文件。

--error-unmatch

如果任何 <文件> 未出现在索引中,则将其视为错误(返回 1)。

--with-tree=<tree-ish>

当使用 --error-unmatch 将用户提供的 <文件>(即路径模式)参数扩展为路径时,假装自指定的 <tree-ish> 以来在索引中已删除的路径仍然存在。将此选项与 -s-u 选项一起使用没有任何意义。

-t

显示状态标签以及文件名。请注意,对于脚本目的,git-status[1] --porcelaingit-diff-files[1] --name-status 几乎总是更好的替代方案;用户应该查看 git-status[1] --shortgit-diff[1] --name-status 以获得更用户友好的替代方案。

此选项以状态标签的形式提供显示每个文件名的原因(状态标签后跟一个空格,然后是文件名)。状态标签都是以下列表中的单个字符

H

已跟踪文件,既未合并也未跳过工作树

S

已跟踪文件,已跳过工作树

M

已跟踪文件,未合并

R

已跟踪文件,有未暂存的移除/删除

C

已跟踪文件,有未暂存的修改/更改

K

未跟踪路径,这些路径是文件/目录冲突的一部分,阻止检出已跟踪文件

?

未跟踪文件

U

带有解析撤销信息的文件

-v

类似于 -t,但对标记为 *假定未更改* 的文件使用小写字母(参见 git-update-index[1])。

-f

类似于 -t,但对标记为 *fsmonitor valid* 的文件使用小写字母(参见 git-update-index[1])。

--full-name

在子目录中运行时,此命令通常输出相对于当前目录的路径。此选项强制路径相对于项目顶层目录输出。

--recurse-submodules

递归地对仓库中每个活动子模块调用 ls-files。目前仅支持 --cached 和 --stage 模式。

--abbrev[=<n>]

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

--debug

在描述文件的每一行之后,添加更多关于其缓存条目的数据。这旨在尽可能多地显示信息以供手动检查;确切的格式可能随时更改。

--eol

显示文件的 <eolinfo> 和 <eolattr>。<eolinfo> 是当“text”属性为“auto”(或未设置且 core.autocrlf 不为 false)时 Git 使用的文件内容标识。<eolinfo> 可以是“-text”、“none”、“lf”、“crlf”、“mixed”或“”。

"" 表示该文件不是普通文件,不在索引中或在工作树中无法访问。

<eolattr> 是检出或提交时使用的属性,它可以是 ""、“-text”、“text”、“text=auto”、“text eol=lf”、“text eol=crlf”。从 Git 2.10 开始,支持“text=auto eol=lf”和“text=auto eol=crlf”。

对于普通文件,会显示索引中的 <eolinfo> (“i/<eolinfo>”) 和工作树中的 <eolinfo> (“w/<eolinfo>”),后跟 (“attr/<eolattr>”)。

--sparse

如果索引是稀疏的,则显示稀疏目录而不展开其包含的文件。稀疏目录将以尾随斜杠显示,例如稀疏目录“x”显示为“x/”。

--format=<格式>

一个字符串,将显示结果中的 %(fieldname) 进行插值。它还将 %% 插值为 %,并将 %xXX(其中 XX 是十六进制数字)插值为十六进制代码 XX 对应的字符;例如 %x00 插值为 \0 (NUL),%x09 插值为 \t (TAB),%x0a 插值为 \n (LF)。--format 不能与 -s-o-k-t--resolve-undo--eol 结合使用。

--

不再将任何后续参数解释为选项。

<文件>

要显示的文件。如果未给定文件,则显示所有符合其他指定条件的文件。

输出

git ls-files 仅输出文件名,除非指定 --stage,在这种情况下它会输出

[<tag> ]<mode> <object> <stage> <file>

git ls-files --eol 将显示 i/<eolinfo><空格>w/<eolinfo><空格>attr/<eolattr><空格*><制表符><文件>

git ls-files --unmergedgit ls-files --stage 可用于检查未合并路径的详细信息。

对于未合并的路径,索引不会记录单个模式/SHA-1 对,而是记录最多三个这样的对;一个来自阶段 1 中的树 O,一个来自阶段 2 中的 A,一个来自阶段 3 中的 B。用户(或 porcelain)可以使用此信息来查看最终应在此路径记录什么。(有关状态的更多信息,请参见 git-read-tree[1]

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

可以使用 --format 选项以自定义格式打印,该选项能够使用 %(fieldname) 符号插值不同的字段。例如,如果您只关心“objectname”和“path”字段,您可以执行带有特定“--format”的命令,如下所示:

git ls-files --format='%(objectname) %(path)'

字段名称

每个路径的显示方式可以通过使用 --format=<格式> 选项进行自定义,其中 <格式> 字符串中的 %(fieldname) 会插值索引条目的各个方面。以下“fieldname”是可理解的:

objectmode

索引中记录的文件模式。

objecttype

索引中记录的文件对象类型。

objectname

索引中记录的文件名称。

objectsize[:padded]

索引中记录的文件对象大小(如果对象是 committree 则为“-”)。它还支持带“%(objectsize:padded)”的大小填充格式。

stage

索引中记录的文件阶段。

eolinfo:index
eolinfo:worktree

索引或工作树中路径内容的 <eolinfo>(参见 --eol 选项的描述)。

eolattr

适用于路径的 <eolattr>(参见 --eol 选项的描述)。

path

索引中记录的文件的路径名。

排除模式

git ls-files 在遍历目录树并查找要显示的文件时(当指定 --others 或 --ignored 标志时),可以使用“排除模式”列表。gitignore[5] 指定了排除模式的格式。

这些排除模式可以按以下顺序从以下位置指定

  1. 命令行标志 --exclude=<pattern> 指定单个模式。模式的顺序与其在命令行中出现的顺序相同。

  2. 命令行标志 --exclude-from=<file> 指定一个包含模式列表的文件。模式的顺序与其在文件中出现的顺序相同。

  3. 命令行标志 --exclude-per-directory=<name> 指定 git ls-files 检查的每个目录中的文件名称,通常是 .gitignore。更深层目录中的文件具有优先权。模式的顺序与其在文件中出现的顺序相同。

通过命令行 --exclude 指定的模式或从 --exclude-from 指定的文件中读取的模式是相对于目录树顶部的。从 --exclude-per-directory 指定的文件中读取的模式是相对于模式文件所在的目录的。

通常,当您希望排除规则像 Porcelain 命令那样应用时,您应该能够使用 --exclude-standard。要模拟 --exclude-standard 的行为,您可以指定 --exclude-per-directory=.gitignore,然后指定

  1. core.excludesfile 配置变量指定的文件(如果存在),或 $XDG_CONFIG_HOME/git/ignore 文件。

  2. $GIT_DIR/info/exclude 文件。

通过 --exclude-from= 选项。

GIT

Git[1] 套件的一部分

scroll-to-top