Как мне поддерживать несколько линий развития между клиентами в Mercurial?

Я работаю над созданием одного и того же веб-приложения для электронной коммерции для нескольких клиентов.

Первоначально существовал стандартный набор страниц, с которых все остальные настройки клиентов были получены в прошлом.

Недавно место, где я работаю, решило использовать Mercurial для контроля версий. Они также решили переработать стандартный набор страниц для нашей электронной коммерции и сделать их основной / базовой линией разработки.

Тем не менее, существуют существующие настройки для каждого из наших клиентов, которые были сделаны до базового набора страниц, которые еще не были введены в систему контроля версий (hg).

обзор

Каков наилучший способ объединить изменения от базовой линии разработки в отдельную линию разработки для каждого из наших клиентов, в то время как мы сохраняем существующие настройки для каждого клиента?

3 ответа

Каков наилучший способ объединить изменения от базовой линии разработки в отдельную линию разработки для каждого из наших клиентов, в то время как мы сохраняем существующие настройки для каждого клиента?

как и в любом другом сценарии ветвления. например:

alice ~/wc/cust-XYZ % hg pull -u $xyz
alice ~/wc/cust-XYZ % hg ci
alice ~/wc/cust-XYZ % hg ci
alice ~/wc/cust-XYZ % hg ci
alice ~/wc/cust-XYZ % hg pull $mainline
alice ~/wc/cust-XYZ % hg merge
alice ~/wc/cust-XYZ % hg ci
alice ~/wc/cust-XYZ % hg push $xyz

У меня есть и будет общий репозиторий и клон для нового клиента. Если у вас есть патч, который должен входить в общий репозиторий, или набор патчей, которые необходимо применить из общего репозитория клиента, вы можете использовать hg трансплантат.

В зависимости от того, насколько индивидуальным должен быть каждый проект, самым простым способом может быть создание отдельного дерева шаблонов для каждого клиента, которое имеет приоритет над базовым набором. Как в

base/template1.html

customer/template1.html

Для любой страницы сначала выполняется поиск в каталоге клиента. Для этого вам не нужно много магии управления версиями, но могут быть удобны суб-репозитории.

Вы можете быть в состоянии отслеживать изменения каждого клиента как набор патчей, используя mq (Ртутные очереди). Это может быть немного сложно объединить наборы патчей.

Вы можете сделать то же самое с rebase потенциально более элегантный, чем mq, но я не уверен, как поделиться наборами ребаз.

Или вы можете просто сохранить базовый репозиторий и отделить репозитории от каждого клиента, которые никогда не возвращаются в базу.

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

Другие вопросы по тегам