Git субмодуль или субрепозиторий или удаленный?
Я использую GIT для управления проектом системы управления контентом (CMS). CMS может иметь несколько плагинов (модуль).
В принципе, я хочу иметь 3 типа репозиториев:
- Основная разработка CMS (каждый новый проект - это проверка последней стабильной и неконфигурированной версии)
- 1 репозиторий на модуль/плагин. (каждый новый проект проверяет последнюю стабильную версию модуля, который они хотят реализовать)
- 1 репозиторий для каждого проекта (каждый клиент будет репозиторием, представляющим персонализацию из основной CMS и модулей)
Для типов 1 и 2 я предполагаю, что это простой базовый репозиторий.
Но когда дело доходит до клиентского проекта, я запутываюсь:
- Сначала я буду клонировать CMS, затем зайти в папку/modules/и снова клонировать все необходимые модули? Это сделает репозиторий внутри репозитория! Будет ли первое репо пытаться зарегистрировать .git/папку каждого модуля?
- Я не могу использовать подмодуль, так как каждый клиент нуждается в персонализации своих модулей.
- Если я модифицирую основной компонент модуля (а не персонализацию, просто исправление ошибки), могу ли я перенести этот единственный файл в исходный репозиторий модулей?
- (Не говоря о модуле unitTest, который будет распространяться повсюду)
Итак, вопрос:
Как я могу организовать репозиторий (ы)/файлы/папки, чтобы быть эффективными?
Ответы
Ответ 1
Макет, который вы описали, будет очень хорошо работать с подмодулями git. Я бы рекомендовал прочитать docs и попробовать несколько tutorials. Ключевая разница, которую представляет ваш план, заключается в том, что в каждом репозитории клиентских и клиентских плагинов есть два пульта вместо одного. И, если вы хотите запустить новый клиентский проект, вам нужно
- fork mainline cms
- вилка всех плагинов, которые будут изменены
- клонировать разветвленные cms из (1), обновить свои подмодули, чтобы указать на новые пульты из (2)
- инициализировать/обновить подмодули
- (необязательно) добавьте URL-адрес основной линии cms в качестве удаленного в вашем клиенте forked cms
- (необязательно) добавьте URL-адреса плагина основной линии в виде пультов в ваших клиентских вилочных плагинах
Лучшим вариантом может быть использование одного и того же репозитория и просто создание ветки для каждого клиента. Вот как я это сделаю.
Ответ 2
Краткое обновление/дополнительная информация о предыдущем ответе: если вам не нравится подход git submodules
или думаю, что это слишком сложно понять, вы можете попробовать
-
git subtrees
(отметьте эту статью на среднем уровне)
- или
git subrepo
(более простая альтернатива подмодулям, Github)
- или даже погрузиться глубже в подмодули с Освоение Git подмодуля "на medium.com
Не забудьте проверить, можете ли вы использовать другой менеджер зависимостей (например RubyGems для Ruby, Composer for PHP...) вместо подмодулей, было бы проще в использовании и обслуживании.