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

Rob*_*rtL 496 git

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

Tux*_*ude 590

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

git ls-tree -r master --name-only
Run Code Online (Sandbox Code Playgroud)

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

git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'
Run Code Online (Sandbox Code Playgroud)

  • 如果要列出当前分支的文件,请使用git ls-tree -r HEAD --name-only (59认同)
  • @NicolasLykkeIversen - `git`不直接版本目录.相反,它存储文件及其路径.`ls-tree`将输出所有版本化文件.为了更好地理解这种区别,请尝试将空目录暂存到`git`.空目录永远不会出现在分阶段的更改中.对这种空目录进行版本化的唯一方法是在目录下实际版本化文件.对于在版本控制中需要这样一个空占位符目录的用例,可以在目录下创建一个虚拟文件,以及该版本.我希望解释清楚. (12认同)
  • 为什么未列出目录? (3认同)
  • 请注意,`ls-tree master`不会在暂存区域显示** tracked **文件。 (2认同)

von*_*and 181

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

  • 请注意,如果我编辑它以包含手册页的相关部分? (9认同)
  • 这似乎只显示当前目录或其下的文件. (4认同)
  • @NathanBasanese 也许您可以使用该信息添加另一个答案。 (2认同)

Nat*_*han 11

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

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

这是从公认答案到〜重复问题/sf/answers/597338941/的方法


小智 6

您可能想要彩色输出。

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

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

您可能希望将其添加为别名:

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

如果要递归列出文件:

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

还有一个别名:

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


Xer*_*rus 6

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

git ls-tree --full-tree --name-only -r HEAD | tree --fromfile .
Run Code Online (Sandbox Code Playgroud)

您可能想对此进行分页:

git ls-tree --full-tree --name-only -r HEAD | tree -C --fromfile . | ${PAGER:-less}
Run Code Online (Sandbox Code Playgroud)

这当然值得tree在 git 配置中作为别名占有一席之地:)