Как обращаться с большим хранилищем git?

В настоящее время я использую git для большого репозитория (около 12 ГБ, каждая ветвь имеет размер 3 ГБ). Этот репозиторий содержит множество двоичных файлов (аудио и изображения).

Проблема в том, что клон и тяга могут занять много времени. Специально шаг "Разрешение дельт" может быть очень длинным.

Каков наилучший способ решить эту проблему?

Я попытался удалить дельта-сжатие, так как он объясняет здесь, используя опцию delta в .gitattributes, но, похоже, не улучшает продолжительность клонирования.

Заранее спасибо

Кевин

Ответ 1

Обновление апрель 2015: Git Large File Storage (LFS) (по GitHub).

Он использует git-lfs (см. git-lfs.github.com) и протестирован на сервере, поддерживающем его: lfs-test-server:
Метаданные можно хранить только в репозитории git и в большом файле в другом месте.

https://cloud.githubusercontent.com/assets/1319791/7051226/c4570828-ddf4-11e4-87eb-8fc165e5ece4.gif


Оригинальный ответ (2012)

Одно решение для больших двоичных файлов , которые не сильно меняются, заключается в том, чтобы хранить их в другом ссылочном файле (например, Репозиторий Nexus), а версия - только текстовый файл, который объявляет, какую версию вам нужно.
Использование "репозитория артефактов" проще, чем хранение двоичных элементов в репозитории source (сделанный для сравнения версий и слияния ветвей, что не очень полезно для указанных двоичных файлов).

Другое решение, более git-centric, git-annex:

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

Однако он несовместим с Windows.

Более общее решение может быть git-media, что также позволяет использовать Git с большими носителями файлы без сохранения носителя в самом Git.

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

Ответ 2

Выполните следующие действия.

1. Установите git lfs на свой локальный компьютер, введя следующий код.

git lfs install

2. Теперь добавьте тип файла, который вы хотите, чтобы lfs управлял для вас.

git lfs track "*.mp4"
  1. Теперь вы все настроены. Идите дальше, добавляйте, фиксируйте и нажимайте свои файлы, и не будет никаких предупреждений.