663

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

4

5 回答 5

783

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

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

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

git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'
于 2013-03-25T03:09:47.250 回答
231

git 管理的文件以git ls-files. 查看其手册页。

于 2013-03-25T03:09:57.593 回答
44

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

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的方法。

于 2019-03-09T20:16:18.387 回答
7

您可能希望使用它进行彩色输出。

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

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)"
于 2019-08-03T22:11:19.897 回答
0

在现有答案的基础上,您可以使用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}

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

于 2021-11-07T02:42:14.640 回答