Мы были в восторге от перехода от svn к hg, и, поскольку рабочий процесс разработки более или менее завершен, остается самая сложная часть - постановка и интеграция системы.
Надеюсь, этот вопрос идет немного дальше вашего обычного «как мне перейти от xxx к Mercurial». Прошу простить длинный и, вероятно, плохо написанный вопрос :)
Мы - интернет-магазин, который реализует множество проектов (в основном PHP и Zend), поэтому у нас есть одно огромное svn-репо с примерно 100+ папками, каждая из которых представляет проект со своими собственными тегами, ветками и, конечно же, стволом. На нашем сервере интеграции и тестирования (где QA и клиенты смотрят результаты работы и тестовые материалы) все в значительной степени автоматизировано - Apache настроен на получение новых проектов, автоматически создавая vhost для каждого проекта / транка; Скрипты миграции mysql тоже прямо в транке, и разработчики могут применять их через простой веб-интерфейс. Короче говоря, теперь наш рабочий процесс таков:
- Код оформления заказа, работа, фиксация
- Запустите обновление на сервере через веб-интерфейс (это в основном выполняет svn на сервере в конкретном проекте, а также при необходимости запускает сценарий db-migration)
- QA изменения на сервере
Этот подход, безусловно, неоптимален для больших проектов, когда у нас есть 2+ разработчика, работающих над одним и тем же кодом. Ветвление в svn вызывало только больше головной боли, ну, значит, переход на Mercurial. И вот в чем вопрос - как организовать эффективный сервер подготовки / интеграции / тестирования для этого типа работы (когда у вас много проектов, скажем, один разработчик может работать над 3 разными проектами за 1 день).
Мы решили по существу создать "стандартное" отслеживание веток, а затем внести все изменения в отдельные ветки. Но как в этом случае автоматизировать промежуточные обновления для каждой ветки? Если раньше для одного проекта мы почти всегда работали над магистралью, поэтому нам нужна была одна БД, один виртуальный хост и т. Д., То теперь мы потенциально говорим о N-базах данных для каждого проекта, конфигурациях N-vhost и т. Д. Тогда как насчет вещей CI (например, запускаете phpDocumentor и / или модульные тесты)? Следует ли это делать только по умолчанию? По филиалам?
Интересно, как другие команды решают эту проблему, возможно, какие-то передовые практики, которые мы не используем или игнорируем?
Дополнительные примечания:
Вероятно, стоит упомянуть, что мы выбрали Kiln в качестве услуги хостинга репо (в основном потому, что мы все равно используем FogBugz)