## 命名

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

## 概要

    git ls-files [-z] [-t] [-v]                (--[cached|deleted|others|ignored|stage|unmerged|killed|modified])*                (-[c|d|o|i|s|u|k|m])*                [--eol]                [-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] [--] [<file>…]

## 描述

这将目录缓存索引中的文件列表与实际工作目录列表合并，并显示两者的不同组合。

下面的一个或多个选项可用于确定显示的文件：

## 选项

-c --cached

在输出中显示缓存的文件（默认）

-d --deleted

在输出中显示已删除的文件

-m --modified

在输出中显示已修改的文件

-o --others

在输出中显示其他（即未跟踪的）文件

-i --ignored

在输出中只显示被忽略的文件。在索引中显示文件时，只打印排除模式匹配的文件。显示“其他”文件时，只显示通过排除模式匹配的文件。

-s --stage

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

--directory

如果整个目录被分类为“其他”，则只显示其名称（带有斜线）而不是其全部内容。

--no-empty-directory

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

-u --unmerged

在输出中显示未合并的文件（forces --stage）

-k --killed

在文件系统上显示由于文件/目录冲突而需要删除的文件以使checkout-index成功。

-z

\ 0行输出终止，不要引用文件名。有关更多信息，请参阅下面的OUTPUT。

-x <pattern> --exclude=<pattern>

跳过未匹配的文件匹配模式。请注意，模式是一个外壳通配符模式。有关更多信息，请参阅下面的EXCLUDE PATTERNS。

-X <file> --exclude-from=<file>

从<file>读取排除模式; 每行1个。

--exclude-per-directory=<file>

读取仅适用于<file>中的目录及其子目录的其他排除模式。

--exclude-standard

在每个目录中添加标准Git排除项：.git / info / exclude，.gitignore和用户的全局排除文件。

--error-unmatch

如果任何<file>没有出现在索引中，则将其视为错误（返回1）。

--with-tree=<tree-ish>

当使用--error-unmatch将用户提供的<file>（即路径模式）参数展开为路径时，假定自从指定的<tree-ish>后索引中删除的路径仍存在。使用此选项`-s`或`-u`选项没有任何意义。

-t

此功能已半弃用。对于编写脚本的目的，git-status [1] `--porcelain`和git-diff-files [1] `--name-status`几乎总是优越的选择，用户应该查看git-status [1] `--short`或git-diff [1] `--name-status`以获得更多用户友好的选择。

此选项在每行开始时用以下标记（后跟一个空格）标识文件状态：

H

缓存

S

skip-worktree

M

未合并

R

removed/deleted

C

modified/changed

K

to be killed

?

other

-v

与`-t`标记为`assume unchanged`（请参阅git-update-index [1]）的文件类似，但使用小写字母。

--full-name

从子目录运行时，该命令通常会输出相对于当前目录的路径。该选项强制相对于项目顶部目录输出路径。

--recurse-submodules

在存储库中的每个子模块上递归调用ls-files。目前只支持 - 高速缓存模式。

--abbrev=<n>

不显示完整的40字节十六进制对象行，只显示部分前缀。非默认位数可以用--abbrev = <n>来指定。

--debug

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

--eol

显示文件的<eolinfo>和<eolattr>。<eolinfo>是当“text”属性为“auto”（或未设置且core.autocrlf不为false）时由Git使用的文件内容标识。<eolinfo>是“文本”，“无”，“lf”，“crlf”，“混合”或“”。

“”表示该文件不是常规文件，它不在索引中或在工作树中无法访问。

它是“”，“ - text”，“text”，“text = auto”，“text eol = lf”，“text eol = crlf”时检查或提交时使用的属性。由于支持Git 2.10“text = auto eol = lf”和“text = auto eol = crlf”。

索引（“i / <eolinfo>”）和工作树（“w / <eolinfo>”）中的<eolinfo>均显示为常规文件，后面跟着（“attr / <eolattr>”）。

不要将更多的参数解释为选项。

<file>

要显示的文件。如果没有给出文件，则显示与其他指定标准相匹配的所有文件。

## 输出

`git ls-files`只是输出文件名，除非`--stage`在这种情况下输出：

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

`git ls-files --eol` 将显示i / <eolinfo> <SPACES> w / <eolinfo> <SPACES> attr / <eolattr> <SPACE *> <TAB> <file>

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

对于未合并的路径，索引不是记录单个模式/ SHA-1对，而是记录多达三个这样的对; 一个来自阶段1中的树O，阶段2中的A以及阶段3中的B.这个信息可以由用户（或瓷器）用来查看最终应该在路径上记录什么。（有关状态的更多信息，请参阅git-read-tree [1]）

如果没有这个`-z`选项，带有“不寻常”字符的路径名将按照配置变量的说明引用`core.quotePath`（请参阅git-config [1]）。使用`-z`文件名是逐字输出的，并且该行由NUL字节终止。

## 排除模式

`git ls-files`可以在遍历目录树时使用“排除模式”列表，并查找指定何时指定标志 - 其他或--ignign的文件。gitignore [5]指定排除模式的格式。

这些排除模式来自这些地方，以便：

1. 命令行标志--exclude = <pattern>指定一个模式。模式按照它们在命令行中出现的顺序排列。

1. 命令行标志--exclude-from = <file>指定一个包含模式列表的文件。模式按照它们在文件中出现的顺序排列。

1. 命令行标志--exclude-per-directory = <name> `git ls-files`通常指定每个目录中文件的名称`.gitignore`。较深目录中的文件优先。模式按照它们在文件中出现的顺序排列。

使用--exclude-from指定的文件中排除或读取的模式在命令行上指定的模式相对于目录树的顶部。从--exclude-per-directory指定的文件中读取的模式相对于模式文件出现的目录。