2009-12-15 5 views
12

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

Разве это не проблема с крупными репо, где изображения меняются регулярно, а начальная выборка репо в конечном итоге становится довольно большой? Кто-нибудь испытывал какие-либо проблемы с этим в реальном мире? Например, я видел несколько альтернатив, используя подмодули и сохраняя изображения в отдельном репо, но это только уменьшает кодовую базу, репозиторий изображения все равно будет огромным. В основном мне просто интересно, есть ли хорошее решение для этого.

+1

Это ограничение по дизайну git. Это было написано для того, чтобы сделать что-то одно: управлять деревом исходников Linux, которое представляет собой почти весь текст. Git - все о различиях и слияниях, которые на самом деле не применяются к изображениям.Если ваши медиафайлы действительно большие или часто редактируются, вам лучше использовать другой механизм для хранения истории этих файлов, и если вы действительно не сотрудничаете с кодом или не делаете много ветвей, тогда вам может быть лучше не используя git вообще. – user57368

+2

git справится с бинарными файлами, а система, которую он использует для * хранения * дельта, основана на двоичном содержимом (текстовые различия, которые вы видите в патчах, вычисляются «на лету», а не представление того, что хранится). Сказав, что xdelta для сжатых изображений вряд ли значительно сократит объем пространства. Вы могли бы сохранить все свои изображения в виде XPM или BMP: p – araqnid

ответ

7

Я бы не назвал это «checkout», но да, при первом выкупе репозитория, при условии, что бинарные данные огромны и несжимаемы, это будет то, что есть - огромное. И да, поскольку закон сохранения все еще действует, его разбиение на модули не спасет вас пространства и времени при первоначальном вытягивании репозитория.

Одно из возможных решений по-прежнему использует отдельный репозиторий и вариант --depth при потянув его. Мелкие хранилища имеют некоторые ограничения, но я не помню, что именно, так как я никогда не использовал его. Проверьте документы. Ключевое слово «неглубокое».

Edit: От git-clone(1):

Мелкая хранилище имеет ряд ограничений (вы не можете клонировать или принести от него, ни толкать от ни в него), но достаточно, если вам только интересуются новейшей историей крупного проекта с длинной историей, и захочет отправить исправления как исправлений.

+1

Интересно, если вы учтете приведенную выше цитату из документа, почти кажется, что нераспределенные vcs могут быть лучше для двоичных данных, так как вам не хватает всех преимуществ использования git, когда имея дело с двоичными данными. – Jamie

+1

Да, но вы все равно можете получить боль от получения огромного хранилища. Кроме того, вы можете использовать отдельный репозиторий не-git для двоичных данных. Но так как я действительно люблю git (хотя сначала был скептически настроен - все, что пишет Linus, будет оценено), я бы предложил разделить двоичные данные и ... ну, имея дело с этим отдельно ;-) –

2

К сожалению, git действительно не предназначен для хранения двоичных данных. Поскольку он распространяется, вы будете вытаскивать все версии всех файлов всякий раз, когда вы клонируете его. Также смешно трудно обрезать эти большие двоичные файлы из вашего репозитория кода. Подробнее об этом здесь: (http://www.somethingorothersoft.com/2009/09/08/the-definitive-step-by-step-guide-on-how-to-delete-a-directory-permanently-from-git-on-widnows-for-dumbasses-like-myself/).

Я бы рекомендовал протестировать его, но сохранить двоичные файлы отдельно от кода (т. Е. С использованием подмодулей). В этом случае, если это не сработает для вас, вы можете использовать другое решение, не переписывая всю историю для своего основного репозитория.

2

Что я делаю, это сделать образы проигнорированными/невосстановленными каталогами, а затем синхронизировать каталог/каталоги изображений с использованием других, не-git-систем (или просто вручную скопировать изменения каталога изображений один раз, когда вы говорите о многом изображения, которые вам не нужно полностью синхронизировать).

1

Существует обсуждение большого хранения файлов с GIT здесь: http://blog.deveo.com/storing-large-binary-files-in-git-repositories/

Я наткнулся на этот вопрос SO как часть моего исследования, и я думал, что я хотел бы отметить человек к записи в блоге я уже рассмотрел (spoiler alert, они рекомендуют git-annex для пользователей, не являющихся пользователями Windows). ,

Смежные вопросы