Как правильно измерить размер объекта git blob? - PullRequest
1 голос
/ 28 мая 2019

Я измеряю размеры мерзавцев с помощью

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

, что дает мне все капли больше 512 КБ.Мне интересно, какой размер является правильным, чтобы рассмотреть вопрос о помещении этого файла (его шаблон пути ...) в хранилище больших файлов Git (LFS).

Это %(objectsize) или %(objectsize:disk)?

Поскольку %(objectsize:disk) сообщает о некоторых странных размерах (жирный):

  • "0901797d58f6916cad4ef4fd581d8254596bdd19", 722013b , 105b

В разделе caveat git cat-file есть кое-что об этом, чего я не понимаю.

Рассматривая LFS, нужно взглянуть наobjectsize:disk предположительно, потому что это пространство, используемое для этого сгустка ...?

1 Ответ

3 голосов
/ 28 мая 2019

Вы должны посмотреть на %(objectsize).


Когда git хранит капли, он может хранить их как плоские объекты или как упакованные объекты.

  1. при хранении плоских объектов git по-прежнему сжимает содержимое, поэтому %(objectsize:disk) будет отражать сжатый размер большого двоичного объекта;

  2. при объединении больших двоичных объектов git может сохранить blob2 рядом с blob1, используя только его diff;
    в этом случае: disksize для blob1 будет сжатым размером BLOB-объекта, а disksize для blob2 будет сжатым размером его diff с blob1

В разделе CAVEAT упоминается, что у некоторых больших двоичных объектов может быть зарегистрировано очень низкое значение disksize, поскольку сообщается только об их разнице .

...