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


如果你想列出当前在分支主机下被跟踪的所有文件,你可以使用这个命令:

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

在现有答案的基础上,你可以使用树来更漂亮地查看它:

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配置中作为树别名的位置:)