2012-07-03 3 views
1

В моем офисе мы переходим от Visual Source Safe (6.0!) К Mercurial, и я пытаюсь понять лучший «меркуриальный» способ обработки нашей ситуации. В настоящее время в любом репозитории проекта мы поддерживаем несколько его версий: например, для Project A, у нас есть VSS Repo для ProjA-Dev, ProjA-Rel1 и ProjA-Rel2 (dev-репо и один для каждого из двух последних релизов).Лучшие практики в Mercurial для поддержки ветвей Dev/Release?

В настоящее время (почти) все новые работы выполняются в dev-репо, а затем изменения, которые считаются необходимыми для возврата в Rel1 или Rel2, выполняются вручную (файлы, извлеченные из VSS, к их собственный рабочий каталог, а затем с помощью некоторого инструмента сравнения только копирование соответствующих изменений). В какой-то момент считается, что будет выпущен новый релиз, поэтому dev-репо будет клонировано и будет Proj * -Rev1, а предыдущий Proj * -Rev1 станет Proj * -Rev2, а Proj * -Dev просто продолжается как будто ничего не произошло. Мне кажется, что должен быть лучший способ сделать это в гораздо более современном инструменте, таком как Mercurial.

Моя нынешняя мысль состоит в том, что каждый проект должен иметь свой собственный репозиторий, а различия Dev/Rel1/Rel2 лучше всего обрабатывать разными именованными ветвями. Однако то, что я не могу понять/видеть/обернуть головой, - это то, как выполнить наш текущий рабочий процесс в такой среде. Если мы будем следовать нашему текущему рабочему процессу, то работа продолжит работу в dev-ветке, и определенные изменения (не все!) Будут отброшены назад в ветви Rel. Я знаю, что это может быть достигнуто с помощью функции трансплантации/трансплантата Mercurial, которая, похоже, не очень хорошо поддерживается в TortoiseHg. И, что более важно, прошлые ответы, похоже, предполагают, что наилучшим решением для этого является не позволить вещам попасть в такое состояние, чтобы начать с 1.

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

+0

Одна концепция, которая обрабатывает это рекламные группы, в соответствии с которыми цикл dev/test/rel можно рассматривать как измерение качества (того же «листа» того же кода), которое является ортогональным к стандартным «функциональным наборам» типа ветвления , Я не знаком с Mercurial, поэтому не могу помочь напрямую. например http://www.ericsink.com/scm/scm_branches.html – StuartLC

+1

Почему бы не выпустить DEV? Я не пытаюсь быть тупым, просто понимаю рассуждения. Если это потому, что функция не закончена, то, возможно, эта работа должна была быть выполнена на собственной «ветке» (не обязательно «именованной ветке»). Я думаю, что ключевым моментом является то, что ветви функций обычно происходят в DVCS, поэтому, если кто-то намеренно не подталкивает незавершенную работу к DEV, вы не должны иметь слишком много вещей в DEV, которые не перемещаются в RELEASE. –

ответ

6

Я не знаю, будет ли это вам точно, но я могу дать вам некоторую информацию о how Mozilla uses Mercurial. Мы выпускаем Firefox каждые шесть недель, и у нас есть несколько разных ветвей, которые работают параллельно: «ночная» строит из репозитория mozilla-central, где происходит вся активная разработка, «аврора» построена из репозитория mozilla-aurora, где мы пытаемся стабилизировать код для релиз, «бета» создается из репозитория mozilla-beta, где мы выполняем окончательную проверку и выпускаем сборки из репозитория mozilla-release. Каждый из этих репозиториев поддерживается как отдельный клон.

The actual branch mechanics Перемещение из одной ветки в другую несколько сложнее. Все филиалы имеют общую историю, но поскольку ветви авроры и беты получают выбранные исправления безопасности и стабильности, пересаженные им в преддверии выпуска, они имеют разную историю. Точный процесс документирован в ссылке в начале этого параграфа, но он сводится к: «пометить хранилище mozilla-central repository, тег и закрыть текущую главу mozilla-aurora, нажать mozilla-central для mozilla-aurora как новый руководитель ". Тот же процесс повторяется для aurora-> beta.

Резервные исправления от разработки до авроры или бета-ветвей - это всего лишь вопрос пересадки наборов изменений. Вы можете использовать команду hg transplant для этого, если хотите, я зарегистрировал, как я это делаю on my blog.

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

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