我发现这个命令可以从我的 git 历史中获取前 10 个最大的文件(在这个已关闭的问题中https://github.com/18F/C2/issues/439)
git verify-pack -v .git/objects/pack/pack-7b03cc896f31b2441f3a791ef760bd28495697e6.idx \
| sort -k 3 -n \
| tail -10
它现在显示如下内容:
32f0dac6ee67325ca12b9c03279ee2dbc7790567 blob 12732444 11425432 1091676437
c63c2851049c51eabbcd54cb46cad367d4e0d593 blob 14368670 12189261 246241495
这些数字代表什么?其中的文件大小是多少?如果有人能分解并解释顶级命令,我将不胜感激。我不明白。
为了减少文件使用的空间,git 将存储在存储库中的对象打包到一个
.pack
文件中。这个包文件包含实际的 git 对象和.idx
用于在包文件中快速定位对象的索引。上面的命令读取给定的
.idx
文件并用相应的包文件进行验证。使用-v
你会得到一个详细的输出。输出中的第三列是对象的大小。使用
sort -k 3 -n
我们正在使用第 3 列(基于大小)对输出进行数字排序,并且tail -10
我们正在删除大小最大的最后 10 个。从它们的哈希中获取文件的名称:
要获取所有名称的列表:
阅读更多:
解压 Git 包文件
Git 内部 - 包文件
Git - 从 SHA1 中查找文件名
ls-tree
这是使用 git 的子命令解决此问题的另一个巧妙方法:-r
以递归方式列出文件。-l
显示 blob(文件)条目的对象大小。sort -k4 -n
根据第 4 列进行数字排序。tail
删除最后 10 项。awk
输出中获取第 4 列和第 5 列。