Каковы преимущества использования SVN перед CVS?

Моя компания использует CVS как фактический стандарт управления версиями. Однако я слышал, что многие люди говорят, что SVN лучше.

Я знаю, что SVN новее, но в остальном я не знаком с его преимуществами.

Я ищу хорошее и краткое сравнение двух систем с указанием любых преимуществ или недостатков каждой в среде разработки Java / Eclipse.

Ответов (12)

Решение

CVS отслеживает модификацию только для каждого файла, в то время как SVN отслеживает всю фиксацию как новую ревизию, что означает, что вам легче следить за историей вашего проекта. Добавьте к этому тот факт, что все современные программы управления версиями используют концепцию ревизии, поэтому переход с SVN намного проще, чем с CVS.

Также существует проблема атомарной фиксации. Хотя я столкнулся с этим только один раз, возможно, что два человека, совершающие вместе в CVS, могут конфликтовать друг с другом, теряя некоторые данные и переводя вашего клиента в несогласованное состояние. При раннем обнаружении эти проблемы не являются серьезными, потому что ваши данные все еще где-то там, но это может быть болью в стрессовой среде.

И, наконец, вокруг CVS разработано не так много инструментов. В то время как новым и блестящим инструментам, таким как Git или Mercurial, определенно не хватает инструментов, SVN имеет довольно большую базу приложений для любой системы.

РЕДАКТИРОВАТЬ 2020 : Серьезно, этому ответу сейчас 12 лет. Забудьте о SVN, используйте Git, как все!

кстати: CVSNT поддерживает атомарные коммиты

Что ж, несколько вещей, которые, как мне кажется, делают svn потрясающим.

  1. Комбинация тиглей SVN-Altassian - намного лучший метод проверки и проверки качества.
  2. Лучшее управление конфликтами и слияниями
  3. Очевидно, что это быстрее для проверки, выполнения коммитов и т. Д.
  4. Проблема атомарной фиксации - возможно, что 2 человека, выполняющие совместную фиксацию в CVS, могут конфликтовать друг с другом, теряя некоторые данные и переводя вашу базу кода в несогласованное состояние.

Перенос можно легко выполнить за несколько часов с помощью cvs2svn.

CVS (Concurrent Versions System) и SVN (SubVersioN) - это две файловые системы управления версиями, которые широко используются группами, работающими над одним проектом. Эти системы позволяют сотрудникам отслеживать вносимые изменения и знать, кто и какие разработки разрабатывает, и следует ли применять ветвь к основной магистрали или нет. CVS - гораздо более старый из двух, и для многих это стандартный инструмент совместной работы. SVN намного новее и содержит множество улучшений для удовлетворения потребностей большинства людей.

SVN имеет 3 основных преимущества перед CVS

  • это быстрее
  • поддерживает управление версиями двоичных файлов
  • и добавляет транзакционную фиксацию (все или ничего)

В книге Subversion есть приложение, в котором подробно описаны важные отличия от CVS, которые могут помочь вам принять решение. Эти два подхода представляют собой более или менее одинаковую идею, но SVN был специально разработан для исправления давних недостатков в CVS, поэтому, по крайней мере теоретически, SVN всегда будет лучшим выбором.

Одно из многих сравнений:

http://wiki.scummvm.org/index.php/CVS_vs_SVN

Это очень специфично для этого проекта, но в целом много всего подходит.

Pro Subversion:

  • Поддержка версионных переименований / перемещений (невозможно с CVS): Fingolfin, Ender
  • Поддерживает каталоги изначально: их можно удалить, и они имеют версии: Fingolfin, Ender
  • Версии свойств файла; нет больше адского "исполняемого бита": Финголфин
  • Общий номер ревизии значительно упрощает управление версиями сборки и регрессионное тестирование: Ender, Fingolfin
  • Атомарные коммиты: Финголфин
  • Интуитивное (на основе каталогов) ветвление и тегирование: Fingolfin
  • Более простые сценарии перехвата (до / после фиксации и т. Д.): SumthinWicked (я использую его для Doxygen после фиксации)
  • Предотвращает случайную фиксацию конфликтующих файлов: Salty-horse, Fingolfin
  • Поддержка пользовательской команды diff: Fingolfin
  • Офлайн-различия, и они мгновенные: sev

Вам следует взглянуть на Git вместо SVN. Это невероятно быстрая и очень мощная DVCS. Это не так удобно , как SVN, но это улучшение в этой области, и это не что трудно учиться.

Одна вещь, которую нельзя упускать из виду, - это экосистема. Я работал в магазине CVSNT и обнаруживал, что все больше и больше инструментов с открытым исходным кодом поддерживают SubVersion по умолчанию.

Я поддержу предложение Eridius относительно Git, но я бы расширил его до другой DRCS (распределенной системы контроля версий), такой как Mercurial и bazaar .

Эти продукты появились сравнительно недавно, и уровень инструментов и интеграции с ними на данный момент кажется низким (на основании моих первоначальных исследований). Я бы сказал, что они лучше всего подходят для сильных разработчиков (и здесь ;-)).

С другой стороны, что не CVS в настоящее время сделать для вас? Исходя из вашего первоначального вопроса, у вас действительно нет никакого ответа: "CVS - отстой, что я мог бы использовать вместо этого?"

Вы должны взвесить стоимость любой потенциальной миграции с преимуществами. Для существующего проекта, я думаю, это будет сложно оправдать.

Как человек, который находится в процессе переключения между CVS и SVN (сначала мы переключили все наши проекты на cvs2svn, а затем решили, что перейдем только на использование svn в новых проектах), вот некоторые из проблем, которые у нас были.

  • Слияние и ветвление очень разные, и если вы часто выполняете ветвление и слияние, если на вашем сервере не запущен SVN 1.5, вам нужно знать, когда вы разветвляетесь (это не очень ясно в диалоговых окнах Tortoise SVN). Майкл говорит, что ветвление и слияние интуитивно понятно, я бы сказал, что после 10 лет использования CVS это не так.
  • Если вы используете сервер SVN в Linux, может быть сложно заставить SA перейти на svn 1.5 в качестве установки по умолчанию 1.4.x.
  • Слияние конфликтов в TortoiseSVN не так просто и не так ясно (по крайней мере, для меня и моих коллег), как в TortoiseCVS. Трехпанельный подход требует некоторого привыкания, а WinMerge (мой любимый инструмент слияния) не выполняет слияние трех панелей.
  • Осторожно: многие из прочитанных мной онлайн-руководств и журнальных статей, очевидно, не разделяются и не объединяются, вам следует настроить свой основной репозиторий как https://svn.yoursvnserver.com/repos/YourProject/Trunk и ветки на https: / /svn.yoursvnserver.com/repos/YourProject/Branches/BranchX . Вы можете навести порядок, если запустите репозиторий не в том месте, но это приведет к путанице.

вы также можете перенести только последний код из CVS в SVN и заморозить текущее репозиторий CVS. это упростит миграцию, и вы также можете создавать свои устаревшие версии в старом репозитории CVS.