You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效列出Git所有分支中的全部已追踪文件?

如何高效列出Git所有分支中的全部已追踪文件

当然有更高效的方法——你原来的脚本会为每个分支单独启动一次git ls-tree进程,分支数量多的时候,频繁的进程启动开销会非常可观,而且大量重复文件的输出也会增加后续sort和uniq的处理压力。

优化方案1:单次调用Git处理所有分支

直接一次性把所有分支作为参数传给git ls-tree,只启动一次Git进程就能获取所有分支的文件列表,再做去重:

git ls-tree -r --name-only $(git for-each-ref --format='%(refname:short)' refs/heads/) | sort -u

或者用分支对应的提交哈希传递(避免分支名含特殊字符的问题):

git for-each-ref --format='%(objectname)' refs/heads/ | xargs git ls-tree -r --name-only | sort -u

优化方案2:利用Git对象数据库直接提取唯一文件路径

如果想进一步减少数据处理量,可以直接从Git对象数据库中提取所有分支涉及的唯一文件路径:

git rev-list --all --objects | grep -v '^[0-9a-f]\{40\}$' | awk '{print $2}' | sort -u

这个命令的逻辑:

  • git rev-list --all --objects:列出所有分支中所有提交涉及的所有对象(含文件、目录)
  • grep -v '^[0-9a-f]\{40\}$':过滤掉纯哈希值的行(这类是目录对象)
  • awk '{print $2}':提取文件路径
  • sort -u:去重得到唯一的文件列表

这个方法在文件重复度高的常规场景下,效率提升会更明显。

内容的提问来源于stack exchange,提问作者francesco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:55:41