Изменить: в отличие от некоторых похожих вопросов, таких как перемещение репозитория SVN с несколькими ГБ в Git или /programming/540535/managing-large-binary-files-with-git Мой сценарий не включает несколько подпроектов, которые может быть легко конвертирован в субмодули git или в несколько очень больших двоичных файлов, которые хорошо подходят для git-annex. Это единственный репозиторий, в котором двоичные файлы представляют собой набор тестов, которые тесно связаны с основным исходным кодом той же ревизии, как если бы они были активами времени компиляции, такими как графика.
Я изучаю переключение старого svn-репозитория среднего / большого размера (50 пользователей, ревизии 60 Кб, история 80 Гб, рабочая копия 2 Гб). Поскольку число пользователей выросло, в магистрали много оттока, и функции часто распределяются по нескольким коммитам, что затрудняет выполнение проверки кода. Кроме того, без ветвления нет возможности «закрыть» плохой код, проверка может быть выполнена только после того, как он будет передан в транк. Я исследую альтернативы. Я надеялся, что мы могли бы перейти к Git, но у меня есть некоторые проблемы.
Проблема с текущим репо в том, что касается git, заключается в размере. В нем много старого мусора, и очистка его с помощью --filter-branch при преобразовании в git может сократить его размер на порядок, примерно до 5-10 ГБ. Это все еще слишком велико. Самая большая причина большого размера хранилища заключается в том, что в тестирование вводится много двоичных документов. Эти файлы варьируются от .5 МБ до 30 МБ, а их сотни. У них также есть довольно много изменений. Я посмотрел на подмодули, git-annex и т. Д., Но наличие тестов в подмодуле кажется неправильным, равно как и наличие приложения для многих файлов, для которых вам нужна полная история.
Таким образом, распределенная природа git - это то, что мешает мне принять его. Я не особо беспокоюсь о распределении, я просто хочу дешевое ветвление и мощные функции слияния. Как я предполагаю, что 99,9% пользователей git делают, мы будем использовать благословенный центральный репозиторий.
Я не уверен, что понимаю, почему у каждого пользователя должна быть полная локальная история при использовании git? Если рабочий процесс не децентрализован, что эти данные делают на дисках пользователей? Я знаю, что в последних версиях git вы можете использовать мелкий клон только с недавней историей. У меня вопрос: реально ли сделать это в качестве стандартного режима работы для всей команды? Можно ли настроить git так, чтобы он всегда был мелким, чтобы вы могли иметь полную историю только централизованно, но пользователи по умолчанию имеют только 1000 оборотов истории? Вариант для этого, конечно, будет просто конвертировать 1000 оборотов в Git, и сохранить SVN репо для археологии. В этом случае, однако, мы столкнемся с той же проблемой снова после следующих нескольких тысяч пересмотров тестовых документов.
- Что такое хорошая лучшая практика для использования мерзавца с большими РЕПО , содержащих много бинарных файлов , которые вы действительно хотите историю? Большинство лучших практик и учебных пособий, кажется, избегают этого случая. Они решают проблему нескольких огромных двоичных файлов или предлагают полностью исключить двоичные файлы.
- Можно ли использовать мелкое клонирование в качестве нормального режима работы или это «взлом»?
- Могут ли субмодули использоваться для кода, в котором имеется тесная зависимость между ревизией основного источника и ревизией подмодуля (например, в двоичных зависимостях времени компиляции или в модульном тесте)?
- Насколько велик "слишком большой" для git-репозитория (локально)? Должны ли мы избежать переключения, если мы можем уменьшить его до 4 ГБ? 2 Гб?