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