Как git работает со сжатыми файлами? - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть svg файлы, которые я хочу отследить с помощью git. Тем не менее, большинство программного обеспечения может прозрачно работать с svgz (что в основном svg.gz). Поэтому я подумывал о переходе на svgz для экономии места на диске.

Каковы плюсы и минусы того, что они svgz вместо svg с точки зрения git?

Моя наивная идея заключается в том, что алгоритмы git diff оптимизированы для текстовых файлов и не будут одинаково хорошо работать на своих сжатых аналогах. Поскольку различия также сжаты, я предполагаю, что общий подход очень эффективен для текстовых файлов, где различия занимают очень мало дискового пространства. Вместо этого для сжатых данных он обычно сохраняет внутренние файлы большего размера, и в конечном итоге я ожидаю, что в какой-то момент хранилище может занять больше места для сжатых файлов.

1 Ответ

0 голосов
/ 01 сентября 2018

Git использует вариант Xdelta в файлах пакета. Это отдельно от текстовых различий (для которых Git использует вариант XDiff ). Все хранимые объекты Git также сжимаются с помощью Git zlib deflate, который принципиально похож на gzip , поэтому на этом конкретном уровне он в значительной степени стирает . 1

Если ваши изображения огромны, или вы помечаете их как «не пытайтесь выполнить дельта-сжатие» с помощью .gitattributes с помощью -delta, вы можете предварительно сжать их, т. Е. Сохранить их как svgz файлы , просто для скорости. 2 Если они меньше, и если какой-то файл svg будет хорошо сжиматься дельта-по сравнению с другим файлом svg, вы, как правило, захотите избегать pre -сжатие их так, что Git не сможет их дельта-сжать.

См. Также Полезна ли перепаковка репозитория для больших двоичных файлов? и Являются ли файлы пакета Git ошибками, а не снимками? В моем ответе на есть еще кое-что git do, когда мы делаем: git gc - git prune . Суть в том, что вам придется провести несколько тестовых испытаний, чтобы увидеть, что лучше всего подходит для вашей конкретной ситуации. Обратите внимание, что выборка и передача используют «тонкие пакеты» (в которых объекты сжимаются относительно базовых объектов, о которых известно, что они существуют в другом Git, но не включаются в файл пакета), чтобы ускорить передачу по сети, и это может быть больше важнее, чем экономия дискового пространства, так что учтите это.


1 или шесть из одного, полдюжины другого .

2 Даже если время, необходимое Git и другим инструментам для их сжатия, одинаково, маркировка -delta не позволит Git рассмотреть их для упаковки, что сэкономит git repack времени.

...