Ответ 1
Subversion - очень хорошая централизованная система контроля версий. Он является зрелым и хорошо поддерживается другими инструментами, такими как Trac. Его "одна версия за снимок" выдающаяся, а "ветвь" - просто "световая копия". Действительно, в контексте устаревшего управления версиями с более "хрупкой" семантикой (например, номера версий для каждого файла и их собственными особенностями) Subversion является выдающимся. (Я использовал его в течение многих лет.)
Тем не менее, я переезжаю в Mercurial. (Я бы рассмотрел Git, но Mercurial в настоящее время гораздо более зрелый в Windows.) Tortoise-Hg не так зреет, как Tortoise-SVN. Однако как Mercurial, так и Git являются ПОСТРОЕННЫМИ ДЛЯ СМЕРТИ. И, что основная проблема для систем управления версиями.
В Mercurial у каждого репозитория есть все. Слияния просто. Репозиторий сам по себе является "песочницей", поэтому вам не нужно иметь "ясновидение" "Магистральных" и "ветвей", а также выполнять другое планирование перед филиалом. Короче говоря, распределенные репозитории - это то, как работают команды разработчиков, даже если разработчики централизованы в командной структуре (переходя к ветке "окончательно одобренной магистрали" ).
Сводка: Subversion - отличная модель, но очень централизованная. Он зрелый, со зрелыми инструментами и зрелой интеграцией с другими инструментами (такими как Trac). Mercurial (и Git) являются лучшими моделями, но предоставляют ту же самую "единственную версию за каждый репозиторий-моментальный снимок" как Subversion. Инструменты (например, Tortoise-Hg) менее зрелые (интеграция с Trac - это больше работы), и вы будете думать немного по-другому при работе с Mercurial (например, распределенные репозитории, которые синхронизированы), что дает некоторые преимущества, но вы должны действительно подумайте о проблеме по-другому (чем вы сделали с Subversion).
Я использую как ежедневно. Они оба потрясающие. Когда мы получим интеграцию Mercurial с Trac более зрелым образом, я полностью перейду в Mercurial. (Менее зрелая Черепаха-Hg не так хороша, как Tortoise-Svn, но я могу жить с ней.)
Полная миграция только на Mercurial может занять некоторое время (например, через год или два, поскольку Trac обеспечивает лучшую интеграцию с Mercurial). Импорт/экспорт между Mercurial и Subversion не страшен. Мы используем оба в нашей существующей кодовой базе: Central "trunk" - это Subversion, а локальные изменения в Mercurial, с окончательной регистрацией обратно в Subversion. Он работает.
Если вы подключаетесь к другим инструментам, просто проверьте его интерфейс с Subversion и Mercurial. Если все вещи равны, идите в Mercurial. В противном случае вы не ошибетесь в Subversion (мы используем Subversion специально из-за поддержки Trac), и это хорошо, чтобы использовать Mercurial поверх этого (мы делаем).
Наконец, в контексте того, как вы сформулировали свой вопрос:
Итак, когда и почему вы выбираете SVN над Mercurial в новом проекте, несмотря на многие преимущества Mercurial/ Gitнад SVN?
Я бы выбрал Svn над Mercurial, потому что:
- Интеграция с другими инструментами (например, Trac) более зрелая, и мы используем эти другие инструменты;
- Утилитный интерфейс (например, Tortoise-Svn) значительно больше зрелые, чем интерфейсы Mercurial (например, Tortoise-Hg);
- Subversion концептуально очень простой модели (например, single-version-snapshot) и централизованное хранилище - это то, как люди исторически думают о версии контроля (разное мышление требуется для распределенного Git/Меркуриальная модель)
- У нас есть твердый процесс, который планирует "багажник" и "ветки", и не требуют значительной поддержки инструмента помочь с этими болезненными сливает-через-ветки.