# Перенос существующего CVS репозитория

Поскольку система Subversion нацелена на то, чтобы заменить CVS, имеет смысл предоставить средства для осуществления такой процедуры. В состав Subversion входит скрипт, переносящий данные из репозитория CVS в репозиторий Subversion. Да, Вы действительно можете забрать свою CVS-историю в новую систему.

## Что для этого требуется

Инструмент для преобразования называется `cvs2svn.py` , и это ни что иное, как скрипт написанный на языке python. Он находится в дереве исходных текстов системы Subversion, в подкаталоге `tools`. Для запуска программы Вам понадобятся некоторые дополнительные пакеты:

python 2.0

  Вам обязательно потребуется дистрибутив языка python версии 2.0 или более поздней. Последнюю версию можно свободно получить на сайте http://www.python.org/.

`rcsparse.py`

  Это модуль языка python для обработки RCS-файлов, он является частью проекта ViewCVS. Необходим для чтения Вашего CVS репозитория. Копия этого модуля для удобства поставляется в той же директории, что и `cvs2svn.py` , хотя может быть доступна более свежая версия на сайте проекта ViewCVS — http://viewcvs.sf.net/. . Просто поместите этот модуль туда, где python сможет его найти - например в директорию `/usr/local/lib/python2.2/`.

привязки python к svn

  Должны быть установлены созданные SWIG привязки к библиотекам Subversion для языка python. В частности, программе `cvs2svn.py` нужно делать обращения к библиотеке `libsvn_fs` для того, чтобы она могла помещать данные в репозиторий Subversion. (См. .)

## Запускаем программу cvs2svn.py

Поскольку в системе CVS нет атомарных фиксаций изменений, `cvs2svn.py` проделывает сложную работу по их определению. Этот процесс проделывается с помощью анализа RCS файлов и поиска в них изменений с одинаковыми комментариями. Если два изменения имеют одинаковый комментарий и были осуществлены примерно в одно и то же время (в течение нескольких минут), программа `cvs2svn.py` группирует их и помещает в создаваемый Subversion репозиторий в составе одной редакции.

Приведённое описание является сильным упрощением; на самом деле осуществляется множество самых разнообразных операций. `cvs2svn.py` осуществляет обработку в несколько проходов, создавая большие объёмы временных данных на диске. Если Вы прервёте выполнение скрипта, то при следующем запуске можете указать ключ `-p`, определяющий, начиная с какого прохода следует возобновить выполнение.

Процедура вызова скрипта очень проста:

    $ svnadmin create /new/svn/repos
    $ cvs2svn.py -s /new/svn/repos /cvs/repos
    …

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