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

使用命令行git,如何让git显示存储库中正在跟踪的文件列表?

304572 次浏览

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

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

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

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

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

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

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

这是对重复问题https://stackoverflow.com/a/8533413/4880003的接受答案的方法。

你可能想要彩色输出。

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

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)"

在现有答案的基础上,您可以使用tree来查看它更漂亮一点:

git ls-tree --full-tree --name-only -r HEAD | tree --fromfile .

你可能想把这个分页:

git ls-tree --full-tree --name-only -r HEAD | tree -C --fromfile . | ${PAGER:-less}

这当然值得在git配置中作为tree别名:)