Ветвление проектов в GIT

есть проект интернет-магазин, для контроля версий используем git.

В процессе разработки пришли к тому, что нужно создать 2 версии немного отличающихся друг от друга.

Если грубо говорить, то разница в них лишь в функционалах вывода шапки, подвала и отображения корзины.

В процессе разработки могут быть следующие ситуации:

  1. Дорабатываем функционал первой версии независимый от второй;

  2. Дорабатываем функционал второй версии независимый от первой;

  3. Дорабатываем общий функционал для обоих версий.

Думали о том, чтобы развести по двум отдельным проектам, но пункт №3, наиболее частая ситуация.

Если же работать в одном проекте, то в ветке master не получится иметь всегда актуальное состояние обоих проектов.

Может быть кому-то доводилось сталкиваться с подобной ситуацией и у кого-то есть решение или подскажите чего почитать?


Ответы (2 шт):

Автор решения: Sergey Skvortsov

Сделайте ветку master1 и master2 и пускай у вас там будут актуальные состояния проектов 1 и 2 соответственно. Изменения только для проекта 1 льете в master1. Изменения только для проекта 2 льете в master2. Общие изменения делаете в отдельной ветке и потом мержите в оба проекта. Возможность мержить, когда git за вас делает работа по удалениям, изменениям и всему такому очень ценна. Лучше её не терять.

Ещё один вариант, более правильный, но сложный в реализации. Выделить общий функционал в отдельный репозиторий.
Создать разные репозитории под проекты. Общий функционал подключить к вновь созданным репозиториям в виде сабмодуля.

→ Ссылка
Автор решения: Roman Konoval

Если разница между двумя вариантами небольшая, то рассмотрите вариант переключения между вариантами с помощью опции конфигурации самого приложения.

То есть не создавать отдельных веток для двух разных версий продукта. Вместо этого различающиеся моменты сделайте зависимыми от условия. Как конкретно это сделать зависит от технологий, которые используются.

→ Ссылка