如何使git显示正在跟踪的文件的列表?


Answers:


628

如果要列出分支下当前正在跟踪的所有文件master,则可以使用以下命令:

git ls-tree -r master --name-only

如果要列出曾经存在的文件(即包括已删除的文件):

git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'

61
如果要列出当前分支的文件,请使用git ls-tree -r HEAD --name-
name

3
为什么未列出目录?
Shuzheng

13
@NicolasLykkeIversen- git不直接对目录进行版本控制。相反,它存储文件及其路径。ls-tree将输出所有版本化的文件。为了更好地理解这种区别,请尝试将空目录暂存到git。空目录将永远不会显示在分阶段的更改中。对这样一个空目录进行版本控制的唯一方法是对目录下的文件进行实际版本控制。对于在版本控制中需要这样一个空的占位符目录的用例,可以在该目录下创建一个虚拟文件,然后对其进行版本控制。我希望解释清楚。
Tuxdude '16

2
请注意,ls-tree master不会在暂存区中显示跟踪的文件。
nn0p

如果它包含许多子目录和文件,是否可以仅显示顶级目录?
布拉萨德'17

191

由git管理的文件由显示git ls-files。查看其手册页。


4
那似乎只显示当前目录或当前目录下的文件。
Lyle Z

11
介意我是否进行编辑以包括手册页的相关部分?
弥敦道(Nathan Basanese)2015年

1
@NathanBasanese也许您可以使用该信息添加另一个答案。
何塞·卡斯特罗

@LyleZ也许是为了符合ls...或ls -R
flow2k '17

1
@LyleZ另外,此行为与git ls-tree- 相同,是相对于的pwd
flow2k

18

接受的答案仅显示当前目录树中的文件。要显示所有已提交的跟踪文件(在当前分支上),请使用

git ls-tree --full-tree --name-only -r HEAD
  • --full-tree 使命令像在存储库的根目录中一样运行。
  • -r递归到子目录。与结合使用--full-tree,可以为您提供所有已提交,已跟踪的文件。
  • --name-only 当您只需要文件路径时,删除SHA /权限信息。
  • HEAD指定您要为其跟踪的已提交文件列表的哪个分支。您可以将其更改为master或任何其他分支名称,但这HEAD是您现在已签出的提交。

这是从公认答案到〜重复问题https://stackoverflow.com/a/8533413/4880003的方法


谢谢!这也适用于裸仓库。
hzpc-joostk,

5

您可能需要彩色输出。

我使用这种单行代码在当前分支的当前目录中列出跟踪的文件和目录:

ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)

您可能想将其添加为别名:

alias gl='ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)'

如果要递归列出文件:

'ls' --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)

还有一个别名:

alias glr="'ls' --color=auto -d \$(git ls-tree -rt \$(git branch | grep \\* | cut -d \" \" -f2) --name-only)"

glr您提供的别名看起来有点怪异,所以我使版本与您提供的第一个别名的格式更加一致alias glr='ls --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)'。经测试git version 2.20.1Debian的10
baltakatei
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.