2016-01-13 3 views
6

У меня есть репозиторий git с веб-проектом. Я хочу настроить этот веб-проект для разных клиентов.Git - поддерживать несколько версий

Например, у меня есть два клиента c1 и c2. Поэтому я создаю две ветви git: c1 и c2.

Каждая версия имеет одинаковую базовую систему, но имеет разные функции. Если я хочу добавить новую функцию или исправить ошибку в одной ветке, нет проблем. Но что, если я хочу изменить что-то, что касается обеих ветвей. Это приводит к большому количеству конфликтов слияния.

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

+3

Если большие части распределены между приложениями, вы можете использовать [Git subodules] (https://git-scm.com/book/en/v2/Git-Tools-Submodules) для хранения частей, которые одинаковы. – Powerlord

+5

Контроль версий! = Конфигурация, создание филиалов на одного клиента - это скользкий наклон. Я настоятельно рекомендую вам определить, что является общим и каково его специфическое для клиента, и каждый клиент имеет свое собственное репо, рекомендация @Powerlord по использованию подмодулей может помочь в этом – Lars

+0

Спасибо Powerlord и Lars за вашу помощь! – user3241334

ответ

1

Мне нравится GitHub особенность Fork для решения таких проблем, основная идея состоит в том, чтобы иметь отдельные хранилища и копирование коммитов с помощью Pull Request или каким-либо иным образом, при таком подходе оба хранилища будут иметь общую базу, а затем будет развиваться как отдельные репозитории.

Чтобы использовать тот же подход, что не нужно использовать GitHub, вы можете просто создать несколько Git репозиториев, а затем добавить дополнительные remote, вместо Pull Request вы можете просто использовать cherry-pick для копирования коммит из одного хранилища в другое. Такой подход не поможет в решении конфликтов в лучшем виде.

Также вы должны подумать о модульном способе разработки общих частей как отдельных модулей, это можно сделать с помощью submodules или с помощью какого-либо другого подхода, связанного с вашим языком программирования, например, в Java вы можете разработать модуль отдельно, а затем использовать его из другие проекты, использующие функциональные возможности управления зависимостями Maven, Gradle или Ivy.

+0

Спасибо за ваш ответ. Я использую теперь разные репозитории для каждого клиента. – user3241334

Смежные вопросы