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

时间:2019-05-28 11:55:49

标签: git git-lfs

我正在测量git blob大小

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',' '$2'">= ${fileSizeThreshold}" \
| sort -t "," --numeric-sort --key=2 > ${outDir}/largeBlobs

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

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

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

  • “ 0901797d58f6916cad4ef4fd581d8254596bdd19”, 722013b 105b

git cat-file的警告部分中,有一些关于此的注释,我不理解。

考虑到LFS,应该应该看看objectsize:disk,因为那是用于该Blob的空间...?

1 个答案:

答案 0 :(得分:3)

您应该查看%(objectsize)


当git存储blob时,它可能将它们存储为平面对象或打包对象。

  1. 在存储平面对象时,git仍会压缩内容,因此%(objectsize:disk)将反映blob的压缩大小;

  2. 当将Blob打包在一起时,git可能会选择仅使用其diff来将blob2存储在blob1旁边;
    在这种情况下:disksize的{​​{1}}将是Blob的压缩大小,而blob1的{​​{1}}将是其diff与disksize

CAVEAT部分提到,某些斑点可能报告的blob2很少,因为只报告了它们的差异