使用命令行git,如何让git显示存储库中正在跟踪的文件列表?
如果你想列出当前在分支主机下被跟踪的所有文件,你可以使用这个命令:
git ls-tree -r master --name-only
如果你想要一个曾经存在过的文件列表(即包括删除的文件):
git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'
接受的答案只显示当前目录树中的文件。要显示已提交(在当前分支上)的所有跟踪文件,请使用
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配置中作为树别名的位置:)
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别