2009-11-30 4 views
0

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

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

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

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

Overview

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

ответ

0

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

base/template1.html 

customer/template1.html 

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

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

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

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

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

+0

... все еще глядя на ваш ответ, у него есть несколько вариантов. – leeand00

+0

Похоже, что ваша первоначальная проблема может заключаться в объединении репозиториев клиентов с базовым репозиторием и ручной выбор, какие биты новее. В этом случае вы можете добавить все базовые файлы в один репозиторий, добавить все файлы клиента в другой, затем потянуть их вместе и «hg merge».Это утомительно, но с графическим инструментом слияния вы должны иметь возможность достаточно быстро определить, какие бит вы считаете более новыми с каждой стороны. Когда вы закончите, разница между базовой ревизией и ревизией слияния должна содержать все изменения, характерные для этого клиента. – joeforker

1

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

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

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 
+0

Что такое $ xyz? Это переменная среды? – leeand00

+1

да (если быть точным, переменная оболочки). он используется в этом примере для абстрагирования URL-адреса или пути к каноническому репозиторию для ветки customer-xyz; аналогично для '$ mainline'. alice '~/wc/cust-XYZ' клонируется из репозитория в' $ xyz'. –

0

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

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

  • Нет связанных вопросов^_^