GIT底层命令之git ls-files

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

概要

git ls-files [-z] [-t] [-v] [-f]
		(--[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>
要显示的文件。如果没有给出文件,则显示与其他指定标准相匹配的所有文件。

例子:我们在工作区新建了test2.txt和test3.txt,并查看暂存区文件的变化,

对这两个文件一起进行add,我们查看index发现这两个文件的SHA-1值是一样的e69de29bb2d1d6434b8b29ae775ad8c2e48c5391

然后给test2.txt文件添加内容"test2 first line"并add,发现两个值不一样了

yaosht@yaosht-PC MINGW64 ~/gitclient (master)
$ touch test2.txt

yaosht@yaosht-PC MINGW64 ~/gitclient (master)
$ touch test3.txt

yaosht@yaosht-PC MINGW64 ~/gitclient (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   test.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        test2.txt
        test3.txt


yaosht@yaosht-PC MINGW64 ~/gitclient (master)
$ git add test2.txt test3.txt

yaosht@yaosht-PC MINGW64 ~/gitclient (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   test.txt
        new file:   test2.txt
        new file:   test3.txt


yaosht@yaosht-PC MINGW64 ~/gitclient (master)
$ cd .git
l

yaosht@yaosht-PC MINGW64 ~/gitclient/.git (GIT_DIR!)
$ git ls-files -s
100644 54b2fa9ce1e9110abf16bfa55053aef717a6c8e8 0       .gitignore
100644 b180ac571959898b0587adcc61376b06947e9aae 0       README.en.md
100644 a8bce25e3e3ef95a8aded942c12fd54d5c70b589 0       README.md
100644 08fe2720d8e3fe3a5f81fbb289bc4c7a522f13da 0       test.txt
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       test2.txt
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       test3.txt

yaosht@yaosht-PC MINGW64 ~/gitclient (master)
$ echo "test2 first line" >> test2.txt

yaosht@yaosht-PC MINGW64 ~/gitclient/.git (GIT_DIR!)
$ git ls-files -s
100644 54b2fa9ce1e9110abf16bfa55053aef717a6c8e8 0       .gitignore
100644 b180ac571959898b0587adcc61376b06947e9aae 0       README.en.md
100644 a8bce25e3e3ef95a8aded942c12fd54d5c70b589 0       README.md
100644 08fe2720d8e3fe3a5f81fbb289bc4c7a522f13da 0       test.txt
100644 a2246f0bf1a5f2cb401c8ad02d37f442bc1e18a8 0       test2.txt
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       test3.txt

发布了212 篇原创文章 · 获赞 135 · 访问量 137万+

猜你喜欢

转载自blog.csdn.net/ystyaoshengting/article/details/104029519