В настоящее время моя компания использует Subversion, CVS, Mercurial и git.
Когда мы начинали пять лет назад, мы выбрали CVS, и мы до сих пор используем его в моем подразделении для нашей основной ветки разработки и поддержки релизов. Тем не менее, многие из наших разработчиков используют Mercurial по отдельности как способ иметь частные контрольные точки без проблем с ветвями CVS (и особенно с их слиянием), и мы начинаем использовать Mercurial для некоторых ветвей, в которых работает до 5 человек. Есть хороший шанс, что мы, наконец, откажемся от CVS через год. Наше использование Mercurial выросло органически; некоторые люди до сих пор даже не трогают его, потому что им нравится CVS. Все, кто пробовал Mercurial, в конечном итоге были довольны им, без особой кривой обучения.
Что действительно хорошо для нас работает с Mercurial, так это то, что наши (самодельные) серверы непрерывной интеграции могут контролировать как репозитории Mercurial для разработчиков, так и основную линию. Таким образом, люди фиксируют свое хранилище, заставляют наш сервер непрерывной интеграции проверять его, а затем публикуют набор изменений. Мы поддерживаем множество платформ, поэтому невозможно выполнить достойный уровень ручных проверок. Еще один выигрыш в том, что слияния часто бывают легкими, а когда они сложны, у вас есть информация, необходимая для хорошей работы по слиянию. Как только кто-то заставляет объединенную версию работать, он может отправить свои наборы изменений слияния, и тогда больше никто не должен будет повторять эту попытку.
Самым большим препятствием является то, что вам нужно перенастроить мозги разработчиков и менеджеров, чтобы они ушли от единой линейной модели ветвления. Лучшее лекарство для этого - доза Линуса Торвальдса, сообщающая вам, что вы глупы и уродливы , если вы используете централизованный SCM. Хорошие инструменты визуализации истории помогли бы, но я еще не удовлетворен тем, что доступно.
Mercurial и CVS хорошо работают для нас с разработчиками, использующими сочетание Windows, Linux и Solaris, и я не заметил никаких проблем с часовыми поясами. (Действительно, это не так уж сложно; вы просто используете секунды эпохи внутри, и я ожидаю, что все основные системы SCM получат это право).
Можно было приложить немало усилий, чтобы импортировать нашу основную историю CVS в Mercurial. Было бы проще, если бы люди сознательно не вводили в нашу основную историю CVS предельные случаи как способ тестирования инструментов миграции истории. Это включало слияние некоторых веток Mercurial с историей CVS, поэтому проект выглядит так, как будто он использовался с первого дня.
Наша кремниевая дизайнерская группа выбрала Subversion. В основном они находятся в восьми часовых поясах от моего офиса, и даже из-за довольно хорошей выделенной линии между нашими офисами оформление покупок является болезненным, но работоспособным. Большим преимуществом централизованных систем является то, что вы можете потенциально загружать в них большие двоичные файлы (например, выпуски поставщиков), не делая огромными все распределенные репозитории.
Мы используем git для работы с ядром Linux. Git будет более подходящим для нас, когда родная версия Windows станет зрелой, но я думаю, что дизайн Mercurial настолько прост и элегантен, что мы будем придерживаться его.