Bright144,
потому что у чисел < 64 длина 6 бит. Добавляем 1 и убираем 3 получается 4 бита, что максимум 15.
Числа > 255 имеют 9 бит, добавляем 1 убираем 2 получаем 8 бит, минимум 128.
Vitsliputsli,
> 4М это меньше, чем 8М, а значит уже не полная копия.
git по умолчанию сжимает файлы
И вообще спор изначально было из-за неверного утверждения «Гит хранит разницу состояний между коммитами – diff».
Гит хранит blob-ы — объекты с данными. Для уменьшения занимаемого места он может их компактно упаковывать в специальные файлы. Но при этом нигде нет специального хранения «разницы между коммитами».
Тип string[] | Categories[] означает что у тебя в массиве либо только строки, либо только объекты. Если они должны быть вперемешку, то тип (string | Categories)[].
Но вообще лучше бы не смешивать типы в массиве без надобности.
Тем не менее, git не хранит разницу между версиями. Pack-файлы это, грубо говоря, архивы, точно так же как какой-нибудь архиватор при упаковке нескольких одинаковых файлов может это понять и переиспользовать повторяющиеся куски.
При построении разницы между версиями git всё равно будет сравнивать полные файлы.
Это ж адское легаси тех времён когда LF реально крутил барабан, а CR возвращал каретку в начальную позицию.
Задача таба перейти к следующей позиции табуляции (может это будет 1 пробел, а может 5), а пробел как любая буква сдвигает каретку ровно на одну позицию.
2³²−2
), то можно просто хранить пользователей в массиве по их индексам.