Git - это файловая система с адресным содержимым, в которой есть три типа объектов: BLOB-объекты, деревья и коммиты. В принципе, форматы контейнерных файлов, такие как ZIP, можно интерпретировать как похожую концепцию как отдельный файл (или ссылку), содержащий дерево в терминах Git. Хотя ZIP-файлы и другие типы контейнеров не имеют специальной обработки в Git, эти контейнеры просто хранятся в виде больших двоичных объектов.
Например, допустим, у меня есть ZIP-файл с несколькими файлами с их временными метками (timestamps (timestamps)не обрабатывается Git), пустые каталоги и наличие такого контейнера ZIP в репозитории Git могут считаться необходимыми (возможно, предварительно скомпилированные файлы JAR, часто редактируемые документы OpenOffice и т. д.). Теперь давайте рассмотрим, как изменяется контейнер. Это создаст совершенно другой объект с точки зрения Git, поэтому резкое увеличение хранилища будет происходить до тех пор, пока контейнер будет неоднократно изменяться. Я натолкнулся на интересный фильтр clean / smudge , который выполняет аналогичные действия, но он уничтожает исходный ZIP-файл при заполнении, перезаписывая исходный ZIP-файл, стирая исходные временные метки входа, возможно ZIP-комментарий и все, что может иметь ZIP-контейнеры (+насколько я понимаю, это затрудняет использование пустых репозиториев, поскольку они не содержат "очищенных" контейнеров ZIP, которые создаются только при проверке), поэтому этот фильтр меня мало интересует.
I 'Интересно, можно ли сказать Git хранить контейнеры (возможно, ZIP), как первоклассные граждане Git, такие как деревья и капли внутри? Я думаю, что он не поддерживает такой случай, хотя.
Обновление 1
Я был не прав, как люди говорят ниже, в Git есть четыре типа объектов: Я пропустил тегобъекты. Однако я думал, что они построены поверх коммитов, как это делают заметки (вероятно).