Как вести разные проекты с одним базовым функционналом?
Добрый день.
Есть у меня один проект, который планируется использовать для другого заказчика. Получается что функционал в большей степени будет один и тот же, основные различия будет только в дизайне.
Как лучше вести разработку: все в одном репозитории, только сделать разные ветки, или все же в разных?
С ветками намучаетесь. Выносите базовый фукционал в git submodule https://git-scm.com/book/ru/v1/%D0%98%D0%BD%D1%81%...
Гит с ними немного кривовато работает, будет не так удобно, как с одним репозиторием, но жить можно.
Либо же, если ваш язык/фреймворк поддерживает вынесение кода в легко и удобно подключаемые модули, то выносите движок в модуль и в отдельный репозиторий.
Александр Королев: увы, только теоретические размышления, т.к. делать не приходилось, лишь думал над этим.
В рельсах уже есть встроенный функционал - Rails::Engine edgeguides.rubyonrails.org/engines.html . В engine можно поместить полную структуру приложения: /app, /config, /db (модели, миграции, вьюшки, ассеты).
Соответственно выносим весь общий код в engine, кладём его в отдельный репозиторий подключаем в Gemfile для development и test через path (gem 'my_engine', path: '/path-to-repository') (чтобы не приходилось делать bundle update на каждое изменени в движке), а для production и staging подключаем как обычно.
Engine в роутах маунтим в корень проекта (mount MyEngine, at: '/') и затем переопределяем в каталоге проекта нужные нам /app/views, /app/controllers
В теории должен получиться движок, которой легко подключается, функционал которого можно переопределять своим кодом. Как будет на практике - не знаю, попробовать это мне так и не довелось. Наверняка выскочат какие-то подводные камни, о которые придётся хорошенько поспотыкаться.