Как организовать репозиторий для проекта с несколькими постоянными ветками?
Столкнулся с проблемой организации репозитория для одного веб-проекта. Суть в следующем: есть некое ядро проекта, на базе перепиленного фреймворка CodeIgniter. На базе этого ядра есть три (а в перспективе и больше) кастомных веток, которые развиваются параллельно, для разных заказчиков.
Ядро активно дорабатывается, и эти доработки должны попадать во все ветки. Ветки тоже активно дорабатываются.
Проблема в том, что специфические для веток модули могут быть разбросаны по структуре каталогов ядра. Кроме того, есть конфигурационные файлы, существующие и в ядре и в ветках, и везде естественно разные.
Сейчас остро встал вопрос о размещении этого хозяйства в репозитории.
Сразу скажу, опыта с git мало, раньше пользовался SVN. Но как я понял, git можно в данном случае использовать в двух вариантах:
1. Один репозиторий. Ядро в master-бранче. Кастомные ветки в отдельных бранчах. После изменений в master - мерджи во все ветки, с которыми, вероятно, придется возиться вручную.
2. Подмодули. Вынос ядра в модуль. Но как это сделать, если папки ядра пересекаются с папками веток, совершенно непонятно.
Подскажите пожалуйста best practice для такой ситуации, не думаю что она уникальна. Возможно ответ кроется не в git?
если я правильно понял то вам нужно создать 4 репозитория. в первом будет ваше ядро. а в 3-х других собственно проекты для "разных заказчиков". и вот в эти 3 первый репозиторий будет подключаться через git submodule https://git-scm.com/book/ru/v1/%D0%98%D0%BD%D1%81%...
Насколько я понял описание, это работает если подмодуль строго ограничен своей директорией. Но по факту ветка заказчика состоит из структуры каталогов и файлов Ядра, в которую в разных местах добавлены другие файлы, специфические для этой ветки. + некоторые конфигурационные файлы ядра имеют иное содержимое.
Можно педставить в качестве аналогии ОС Windows, например, и конкретные её конфигурации у разных пользователей - есть какие-то документы, разные программы установлены и т.п. И все это разбросано по системным папкам.
Александр: ну так и будет если подключить через подмодуль. тобишь в репозитории где ведется разработка - будет цепляться другой репозиторий который "ядро". тобишь в 3 репозиториях идет своя разработка. а когда к примеру что то меняется в ядре - оно обновляется и во всех 3 репозиториях.
iBird Rose: может я чего не пониманию, поясните пожалуйста как это сделать в такой структуре (упрощенно):
Project
\application -- это в ядре
\\config
\\\database.php -тут в каждой ветке свое содержимое
\\\config.php- и тут в каждой ветке свое содержимое
\\modules
\\\module 1 - это нужно ядру
\\\module 2 - это тоже нужно ядру
\\\module 3 -- тут специфические файлы для ветки
\\\module 4 -- тут специфические файлы для другой ветки
и т.п.
Судя по мануалу на git-scm, все что в submodule - должно быть в отдельной папке и никак не пересекаться с основным проектом.
Александр: в такой структуре видимо не получится реализовать. но в любом случае вам придется создавать разные репозитории для каждого проекта. в одном репозитории это точно не получится как вы хотите