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