如何获取.git/objects目录下所有blob的扁平列表?
获取.git/objects目录下所有完整Blob哈希列表
下面是几个直接可用的命令,能输出你要的单列完整哈希格式:
方法1:用find+sed快速生成
这个命令直接遍历objects目录下的哈希文件,拼接路径得到完整哈希:
find .git/objects -type f -regextype posix-extended -regex '\./[0-9a-f]{2}/[0-9a-f]{38}' | sed 's/\.\///; s/\///'
- 逻辑:find筛选符合Git哈希格式的文件,sed去掉路径里的
./和中间的/,合并成完整40位哈希。
方法2:用Git原生命令精准筛选Blob
如果只想获取真正的Blob对象(排除commit、tree等其他Git对象),用Git自带命令更可靠:
git cat-file --batch-check='%(objectname) %(objecttype)' < <(git rev-list --all --objects) | awk '$2 == "blob" {print $1}'
- 逻辑:先列出仓库所有对象,再通过
git cat-file判断对象类型,最后只输出Blob类型的完整哈希。
方法3:用find+awk简化写法
不用正则,通过目录深度限制来筛选文件,再拼接路径字段:
find .git/objects -mindepth 2 -maxdepth 2 -type f | awk -F'/' '{print $(NF-1)$NF}'
- 逻辑:只找objects下两级目录里的文件,awk按
/分割路径后,把目录名(前两位哈希)和文件名(后38位)拼接起来。
内容的提问来源于stack exchange,提问作者Tryer
相关产品推荐
相关产品推荐

