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

标签 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 的 blob。 我想知道在考虑将此文件(其路径模式...)放入 Git 大文件存储 (LFS) 时应考虑哪种大小是正确的。

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

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

  • “0901797d58f6916cad4ef4fd581d8254596bdd19”,722013b105b

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

考虑到 LFS,人们应该查看 objectsize:disk ,因为那是该 blob 使用的空间...?

最佳答案

您应该查看%(objectsize)


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

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

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

  3. 的差异的压缩大小

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

关于git - 测量 git blob 对象大小的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56341730/

相关文章:

git - 如何将 GIT 存储库从 Bonobo GIT Server 导入到 Visual Studio Team Services

git - 将本地(现有)git repo 导入 Aptana 3

Git 没有移动到特定的分支

git - git lfs pull 是否可以忽略某些文件/文件夹?

使用 LFS 从本地存储库进行 Git 克隆

git - git add 的详细显示

gitignore,如何排除特定目录

git - 将 SVN 转换为 Git 使用 lfs 保存大文件

windows - Ubuntu wsl2 git 在大型 repos 上获取 "The remote end hung up unexpectedly"

已达到 GitHub Git-LFS 限制