Подтвердить что ты не робот

Git субмодуль или субрепозиторий или удаленный?

Я использую GIT для управления проектом системы управления контентом (CMS). CMS может иметь несколько плагинов (модуль).

В принципе, я хочу иметь 3 типа репозиториев:

  • Основная разработка CMS (каждый новый проект - это проверка последней стабильной и неконфигурированной версии)
  • 1 репозиторий на модуль/плагин. (каждый новый проект проверяет последнюю стабильную версию модуля, который они хотят реализовать)
  • 1 репозиторий для каждого проекта (каждый клиент будет репозиторием, представляющим персонализацию из основной CMS и модулей)

Для типов 1 и 2 я предполагаю, что это простой базовый репозиторий. Но когда дело доходит до клиентского проекта, я запутываюсь:

  • Сначала я буду клонировать CMS, затем зайти в папку/modules/и снова клонировать все необходимые модули? Это сделает репозиторий внутри репозитория! Будет ли первое репо пытаться зарегистрировать .git/папку каждого модуля?
  • Я не могу использовать подмодуль, так как каждый клиент нуждается в персонализации своих модулей.
  • Если я модифицирую основной компонент модуля (а не персонализацию, просто исправление ошибки), могу ли я перенести этот единственный файл в исходный репозиторий модулей?
  • (Не говоря о модуле unitTest, который будет распространяться повсюду)

Итак, вопрос: Как я могу организовать репозиторий (ы)/файлы/папки, чтобы быть эффективными?

4b9b3361

Ответ 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...) вместо подмодулей, было бы проще в использовании и обслуживании.