From Novosibirsk, Russia? Our tiny company is looking for current or future rock-star developers.

December 04, 2006

CVS vs. SVN

(Про историю и возможности CVS и Subversion написано в Wikipedia.)

Относительно CVS/SVN меня спрашивали за последнее время уже раза три, поэтому ниже изложено мое мнение по поводу source control в общем.

Первое. Если на сохранение версий исходных кодов есть время и не жалко сил, я бы посмотрел в сторону нетрадиционных бесплатных систем контроля версий. Например, darcs. (Но есть и множество других. Если вам правда хочется хранение истории видеть частью программистского искусства, не запрещается даже написать свою систему, как Линус Торвальдс. Уж по крайней мере стоит рассмотреть все имеющиеся варианты.)

Поддержка darcs средами разработки весьма плоха, но зато вы имеете возможность записывать в репозиторий часть изменений в файле и обмениваться изменениями между разработчиками, не складывая их в общий репозиторий. (Вообще, это распределённая система со всеми вытекающими. Единого центрального репозитория нет. В darcs каждая рабочая копия — одновременно и branch, и репозиторий.)

Второе. Если вам нужно просто хранить историю версий для большого настоящего проекта со сроками и всеми делами, я бы выбрал CVS. Причина проста и банальна. Если в репозитории случится беда (а она хотя бы раз в год случается), в него можно залезть и поправить всё руками. Руками же можно перенести часть репозитория в другое место, исправить проблему в рабочей копии и т. п.

В сторону Subversion смотреть можно. Однако она ещё крайне молода. Стоит копнуть чуть глубже, например, в сторону нетривиальной настройки прав доступа или перемещений между репозиториями, как всё оборачивается печально. Кроме того, интеграция Subversion с, например, Eclipse чуть хуже, чем интеграция CVS.

У Subversion по сравнению с CVS есть три преимущества.

Первое — атомарные коммиты. Действительно хорошо, однако жить можно и без них. (Пару недель назад двое товарищей по работе начали коммитить в один и тот же репозиторий CVS одновременно. Получилась картина «две змеи, поедающие друг друга». У каждого процесс остановился посередине из-за конфликтов. Но ничего, справились.)

Второе — поддержка переименования файлов. Однако, если вы гонитесь за полным порядком в репозитории, вам Subversion будет мало, а если нет, то удалить старый и добавить новый файл достаточно.

Третье — хранение метаданных. Однако метаданные нужны редко. Встроенные навороты вроде svn:external работают плохо. Другое дело, если у вас есть сторонние утилиты, интегрирующиеся с SVN при помощи свойств.

(Есть также мнение, что Subversion на больших проектах медленно работает, но я не поверю, пока не увижу сам.)

Сравнение возможностей разных систем управления версиями можно найти на Wikipedia.