2015-04-16 1 views
0

У нас есть система контроля версий Mercurial, и у нас возникают трудности с управлением выпуском для обязательных функций, дополнительных функций и исследований. У нас есть два отдельных репозитория: один для выпуска и один для разработки.Как управлять репозиториями исходного кода для запланированных выпусков, разработки и исследований

Мы планировали развертывание каждую четверть. Поэтому мы разрабатываем функции (обязательные и необязательные) в течение трех месяцев, а тестеры тестируют функции на сайте Dev (непрерывная сборка).

В конце цикла выпуска мы должны принять обязательные и необязательные функции (только QA) от разработки repo и вручную скопировать их в репозиторий выпуска. Мы не можем объединить репозиторий разработки в выпуск и скопировать файлы вручную, потому что во время выпуска в репозитории разработки могут быть не проверены/неработающие функции/код. Затем мы создаем тестовый сайт из репозитория выпуска и тестируем тестеры. Если обнаружены какие-либо проблемы, они сначала фиксируются в релизе репо, а репозиторий релиза объединяется в репозиторий разработки.

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

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

спасибо.

+0

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

+0

http://nvie.com/posts/a-successful-git-branching-model/ –

ответ

0

Вы должны сделать разработку функций из точек выпуска. Никогда на tip или от случайных точек:

v1 ----- v2 -- v3 --> v? 
|\  // /
|\f1 ---/ /
|\f2 --- /
| f3 ------- 
f4 ------------------> 

f... являются развитие функции. v... - это точки после успешного слияния/тестирования наборов функций (строго говоря, это тег, но для поддержки исправлений выпуска вы можете использовать именованные ветви).

В примере я выбор функций f1 и f2 для v2 выпуска путем слияния/тестирование/крепления к v2 ветви или default ветви с тегом v2 изменением, что в f1 и f2 ветви. Если я нашел ошибку в f1, я исправлю ее в f1, а затем объединился с v2' и v3'.

f3 функция готова к отправке только в v3 выпуск. Хотя мы по-прежнему считаем, что f4 небезопасен для доставки.

Существенная часть - правильно выбрать точку, с которой вы начинаете реализовывать функцию. Если вы выберете слишком рано v пункт - некоторые функции могут быть пропущены в дереве исходного кода, если вы выберете слишком поздно, и вам будет предложено доставить функцию в раннем выпуске v0 - вам необходимо выполнить резервное копирование своих функций без поддержки с помощью инструмента DVCS.

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

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

Также вы просите избегать набора вишней «особенностей».Этот термин обычно ассоциируется с сбором ошибок, который можно избежать, если вы найдете bisect первый набор изменений, который вводит ошибку, исправляет ошибку поверх этого набора изменений и объединяется со всеми необходимыми ветвями, которые исправляют.

Или просто сражайтесь с вишневыми сборками, как и сейчас, так как маловероятно, что легко принять модель разработки/выпуска для таких проводных. Модель ветвления SVN (специфическая реализация) очень близка к тому, что вы делаете с Mercurial.