使用命令行git,如何让git显示存储库中正在跟踪的文件列表?
答案 0 :(得分:538)
如果要列出分支master
下当前正在跟踪的所有文件,可以使用此命令:
git ls-tree -r master --name-only
如果您想要一个曾经存在的文件列表(即包括已删除的文件):
git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'
答案 1 :(得分:174)
由git管理的文件由git ls-files
显示。查看其手册页。
答案 2 :(得分:5)
如Lyle Z所指出的那样,当前答案仅显示当前目录树中的文件。要显示(在当前分支上)已提交的所有跟踪文件的全部,请使用
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的可接受答案。
答案 3 :(得分:3)
您可能希望以此作为彩色输出。
我使用这种单行代码在当前分支的当前目录中列出跟踪的文件和目录:
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)"