Может ли файл состоять из нескольких больших двоичных объектов в git? - PullRequest
0 голосов
/ 22 декабря 2018

Мне было интересно, позволит ли git (по крайней мере, в теории), чтобы данный файл состоял из нескольких больших двоичных объектов.

Это было бы полезно в таких ситуациях, как:

commit-1: composed of big file F.
commit-2: edit on F, one line in its contents was edited.

Если бы это произошло, git мог бы разбить оригинальный шарик F на 3 шарика, сделав коммит-1 указаннымтри BLOB-объекта (назовем их A, B и C) и теперь указываем коммит-2 на BLOB-объекты A, B 'и C. Это в определенных патологических сценариях может потенциально сохранить гига в памяти / на диске.

Из моего понимания git-деревьев и блобов, git не был спроектирован таким образом.Я что-то упустил?

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Вы не.git не был специально разработан для работы с большими файлами, и его механизм хранения показывает это.К сожалению, даже Git LFS здесь не поможет.

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

В конечном итоге этот файл будет сохранен в файле пакета, где он может быть дельта-сжатым с соседними BLOB-объектами, но нет гарантии.

Вы могли Создайте пользовательский сервер для хранения в libgit2 , добавив собственный механизм, эффективный для вашего известного формата данных.Но у вас не будет совместимости с git из командной строки, так что это будет неудачной ситуацией для большинства пользователей.

0 голосов
/ 22 декабря 2018

Git использует дельта-сжатие для эффективной упаковки больших двоичных объектов.https://en.wikipedia.org/wiki/Delta_encoding#Git

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...