测量 git blob 对象大小的正确方法是什么

Whats the correct way to measure a git blob object size

我正在用

测量git斑点大小
fileSizeThreshold=2^19
git rev-list --objects --all \
| git cat-file --batch-check='"%(objecttype)","%(objectname)",%(objectsize),%(objectsize:disk),"%(rest)"' \
| sed -n 's/^"blob",//p' \
| awk -F',' ''">= ${fileSizeThreshold}" \
| sort -t "," --numeric-sort --key=2 > ${outDir}/largeBlobs

这给了我所有大于 512kb 的 blob。 我想知道在考虑将此文件(其路径模式...)放入 Git 大文件存储 (LFS) 时要考虑的正确大小。

%(objectsize)还是%(objectsize:disk)

因为 %(objectsize:disk) 报告了一些奇怪的尺寸(粗体):

git cat-file 的警告部分,有一些注释,我不明白。

考虑到 LFS,应该看看 objectsize:disk 据说是因为这是用于此 blob 的 space...?

你应该看看 %(objectsize)


当 git 存储 blob 时,它可以将它们存储为平面对象或压缩对象。

  1. 存储平面对象时,git仍然压缩内容,所以%(objectsize:disk)将反映压缩后的blob大小;

  2. 将 blob 打包在一起时,git 可能会选择仅使用其差异将 blob2 存储在 blob1 旁边;
    在那种情况下:blob1disksize 将是 blob 的压缩大小,而 blob2disksize 将是 its 的压缩大小与 blob1

  3. 的区别

CAVEAT 部分提到某些 blob 的报告 disksize 可能非常低,因为 仅报告了它们的差异