Сейчас я прохожу это, поэтому собираюсь добавить свои 2 цента (в конце игры).
Я отвечаю за вывод нашей команды из CVS на Subversion, Mercurial или Git. Опыт вашей команды, ваш проект (ы) и ваши методологии выпуска, вероятно, изменят ваш ответ. Для раскрытия информации моя команда работает над серией небольших Java-проектов и использует IDE Netbeans и Maven для разработки и выпуска программного обеспечения.
Subversion
Да, извините, это немного не по теме, но это определенное обновление с CVS. Это приведет к атомным фиксациям проекта, широкой пользовательской базе и хорошим сообществам tools . Вероятно, это самый простой переход с наименьшим необходимым обучением, но вы определенно не обладаете мощью DVCS. Я рекомендую инструмент cvs2svn .
Mercurial
У Mercurial есть отличная документация, даже для некоторых странных вариантов использования. Это легко раскрутить хранилище. Простота установки (просто используйте Python, setup-tools и 'easy_install mercurial'). Легко конвертировать, и разработчики, которые ненавидят командную строку, получают отличный инструмент TortoiseHg из коробки.
Я нашел инструмент cvs2hg гораздо более точным при конвертации, чем встроенное расширение 'hg convert', но ymmv.
Чтобы научить каждого рту, попробуйте сайт Джоэла: HgInit . Существует множество книг и онлайн-учебных пособий, но привыкнуть к тому, что толкать и тянуть (и как это связано с вашим процессом релиза) будет самой безумной частью. Я лично нахожу эту модель DVCS push / pull предпочтительной, но другие могут не согласиться. Это практически то же самое, что заставлять всех разветвлять каждый кусок, над которым они работают.
При принятии решения о том, следует ли использовать подпункта или просто объединить все это в один большой репозиторий, выберите один репозиторий. Работа с несколькими подпунктами оказалась немного труднее, чем просто иметь один репозиторий со смешанной историей. (Ваш список проектов и то, как они взаимодействуют, сильно повлияют на это решение). Ваши инструменты IDE и GUI помогут преодолеть некоторые из этих странностей. После конвертации пройдитесь по каждой ветке и узнайте, чего ожидать. Переключение на ветку больше не означает, что вы получите несколько измененных файлов. Это означает, что все, что не было разветвлено, не существует.
Гит
Я действительно удивился тому, насколько мне понравился этот инструмент. Интеграция нашей IDE была лучше, инструмент был быстрее, чем hg (по моему опыту), и было проще настроить такие вещи, как ssh-репозитории.
Установка и преобразование и настройка были мишкой. В конце концов я решил, что эта часть стоит больше, чем требуется. Согласно этому вопросу, инструмент 'git cvsimport' не работает в больших проектах CVS. Кроме того, мой инструмент перехода: cvs2svn очень нуждается в помощи для улучшения функциональности Git. После того, как я выяснил весь этот бизнес blob / dump-file-then-import-to-bare-git-repo, я обнаружил, что забыл забрать все мои ветки из CVS. Может быть, я просто никогда не понимал инструменты достаточно хорошо, но самый безопасный путь от CVS к Git, кажется, через SVN.
Кроме того, существует множество хороших аргументов против DVCS, например, проблема каждого разработчика, использующего весь репозиторий. Если вы когда-нибудь подтолкнете какое-нибудь плохое дзёдо, и оно будет потянуто, это будет огромная боль, удаляющая его.
Для размещения http-репозитория посмотрите scm-manager и RhodeCode . RhodeCode сложнее в настройке, но обладает гораздо большей функциональностью. Оба инструмента сложно использовать с подпунктами, так что будьте готовы к этому.
Что касается убеждения вашего босса. Я сделал это, придумав термин «CVS-хирургия». Как и все остальное, следите за тем, сколько времени вы тратите, возвращаясь к CVS и исправляя ошибки фиксации / отката. Затем представьте ваше дело как «У вас сейчас есть X часов моего времени бесплатно, если мы просто перейдем на этот инструмент». Я обнаружил откат к нетегированной фиксации в CVS, фиксации на уровне файлов и трудности, связанные с поиском изменений в ветвях, возникающих при самых больших проблемах с CVS.