Как мне поддерживать несколько линий развития между клиентами в 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
, но я не уверен, как поделиться наборами ребаз.
Или вы можете просто сохранить базовый репозиторий и отделить репозитории от каждого клиента, которые никогда не возвращаются в базу.
В каждом случае ваша жизнь (слияние) будет намного проще, если вы организуете свой проект так, чтобы настройки для каждого клиента были ограничены, чтобы они с меньшей вероятностью вступали в конфликт с изменениями в базовом продукте.