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

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

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

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

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

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

Kevin

2 ответа

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

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

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


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

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

Другое решение, более ориентированное на git, это git-annex:

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

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

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

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

Следуй этим шагам.

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

git lfs install

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

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