我正在测量 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 的 blob。 我想知道在考虑将此文件(其路径模式...)放入 Git 大文件存储 (LFS) 时应考虑哪种大小是正确的。
是%(objectsize)
还是%(objectsize:disk)
?
因为 %(objectsize:disk)
报告了一些奇怪的大小(粗体):
- “0901797d58f6916cad4ef4fd581d8254596bdd19”,722013b,105b
在 git cat-file 的警告部分,有一些注释,我不明白。
考虑到 LFS,人们应该查看 objectsize:disk
,因为那是该 blob 使用的空间...?
最佳答案
您应该查看%(objectsize)
。
当 git 存储 blob 时,它可能会将它们存储为平面对象或打包对象。
存储平面对象时,git 仍然会压缩内容,因此
%(objectsize:disk)
将反射(reflect) blob 的压缩大小;将 blob 打包在一起时,git 可能会选择仅使用其 diff 将
blob2
存储在blob1
旁边;
在这种情况下:blob1
的disksize
将是 blob 的压缩大小,而blob2
的disksize
将是 blob 的压缩大小。将是其与blob1
的差异的压缩大小
CAVEAT 部分提到,某些 blob 报告的磁盘大小
可能非常低,因为仅报告它们的差异。
关于git - 测量 git blob 对象大小的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56341730/