Распределенная система управления версиями - это очень хорошо (tm), но я считаю, что основным препятствием для принятия является обучение пользователей новым возможностям, которые дает новый SCM.
Это в сочетании с часто тусклым количеством инструментов пользовательского интерфейса (полуфабрикаты реализация черепаховая и т.д.), приносит пустой взгляд в глаза многих сотрудников, которые давно отрекаются командной строкой для хорошего инструмента UI .
Кроме того, с помощью таких инструментов, как CVS, я нахожу, что люди ненавидят ветвления и слияния, потому что они действительно не хотят застрять целый день, выполняя трехсторонние слияния, часто не совсем уверенные, какое слияние будет правильным.
Моя точка зрения такова: начните с того, что рассказывайте людям, что они получают (а не просто «эй, посмотрите эту новую классную игрушку»), и готовьте их к тому факту, что использование командной строки - это путь, и что частое ветвление с постоянным временем хорошая вещь.
Многие системы, такие как Mercurial, поставляются с полной системой очередей исправлений, а это означает, что с точки зрения непрерывной интеграции вы знаете , что все, что поступает в производство, было одобрено QA. Подобные вещи сложно сделать правильно с CVS или SVN.
С Mercurial у людей были бы частные репозитории для их текущей работы, и все разработчики делят дерево разработчиков на сервере. Система CI контролирует дерево разработчиков и извлекает все изменения, создает и выполняет юнит-тесты. Если все проходит, это передает изменения в дерево тестирования, из которого создается результат для сотрудников QA. Каждое добавленное изменение получает токен. Когда QA считает, что функция завершена, они аннотируют дерево тестирования этим токеном, и связанные с ним наборы изменений затем автоматически распространяются на производственное дерево.
Используя этот подход, вы никогда не будете передавать что-либо вручную в производственную ветвь или ветвь тестирования. Скорее состояние кода и выход из QA определяет содержимое вашей производственной ветви,