© Георгиевский Анатолий, 11.02.2006 - 06.03.2006

Управление версиями в Subversion

В статье приводится минимальный набор команд системы управления версиями Subversion необходимый для индивидуальной работы над проектом и организации совместной работы внутри группы. Мы находим применение системы svn простым и удобным для отслеживания версий любых текстовых и бинарных документов. Студентам окажется удобным переносить файлы с домашнего компьютер на учебный кластер и сдавать таким образом задания.

Создание репозитория проекта

Репозиторий проекта создается командой svnadmin с указанием способа организации хранения файлов. Создавать репозитории и назначать права доступа может любой непривилегированный пользователь системы.

$ svnadmin create project --fs-type bdb

project - указывает путь к репозиторию. Будет создано пустое хранилище с размещением версий файлов в базе данных.

Организация совместной работы

Для совместной работы над проектом, надо организовать доступ к репозиторию svn для нескольких участников проекта. Имена пользователей, принимающих участие в работе над проектом, и пароли доступа создаются в файле паролей (project/conf/passwd):

[users]
vasya=
petya=

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

$ chmod 600 {путь к репозиторию проекта}/conf/passwd

Далее в файле конфигурации необходимо указать правила доступа к репозиторию, надо раскомментировать соответствующие строки в файле project/conf/svnserve.conf

[general]
auth-access = write
password-db = passwd

Теперь с репозиторием могут одновременно работать несколько прользователей, каждый под своей учетной записью. Также можно открыть анонимный доступ на чтение.

Удаленный доступ к репозиторию svn

Для удаленного доступа можно использовать защищенный протокол svn+ssh. Подключение к удаленному репозиторию выглядит так:

> svn co svn+ssh://194.85.238.22/project --username (имя) path

При подключении система дважды запрашивает пароль: пароль при доступе к учетной записи по ssh и пароль для доступа к репозиторию. В результате будет создана локальная версия проекта, в папке path.

Создание репозитория на основе готового проекта

Чтобы создать наполнение репозитория на основе готового проекта, добавить папку проекта в репозиторий применяется команда

svn import project svn+ssh://194.85.238.22/repository/project --username (имя)

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

Добавление и удаление файлов

Добавление файлов и каталогов может осуществлятья командой

svn add имя_файла

Добавление файлов из проекта

svn delete имя_файла

Файл будет добавлен или удален из локальной копии проекта. Изменения на сервере наступают только после применения команд синхронизации версий.

Синхронизация версий

Обновление локальной версии проекта осуществляется командой

svn up

При этом обновляются только те файлы, в которые вносились изменения между обновлениями. Тем самым минимизируется объем информации передаваемой по сети.

Обновление версии на сервере

После того как локальные файлы были изменениы, необходимо отправить изменения на сервер. Обновление версии осуществляется командой

svn ci -m "сообщение по поводу изменений"

Те файлы, которые подвергались изменению в локальной версии проекта будут отосланы в репозиторий проекта. В репозитории хранятся все версии и все изменения проекта, внесенные при каждом обновлении.

При совместной работе над проектом рекомендуется сразу перед загрузкой обновлять локальную версию (svn up). Делается это для того чтобы заранее оценить возможность создания конфликтов и заняться разбором конфликта версий локально до, а не после создания новой версии. Стоит отметить, что конфликты версий возникают крайне редко. Subversion позволяет одновременно с разных компьютеров вносить изменения в один и тот же файл проекта. Конфликт версий возникает только в случае, когда изменения касаются одних и тех же строк кода.

Версии нумеруются последовательно в хронологическом порядке. При каждом обновлении (svn ci), значение версии увеличивается.

При работе с Subversion используются в основном три команды: "добавить/удалить файл", "обновить локальную версию" и "отправить изменения в базу svn". Обычно, приходя на рабочее место, я обновляю локальную версию, потом работаю, вношу изменения в код программы, в конце дня отправляю результаты работы в хранилище. Кроме всего прочего это позволяет мне придя домой, обновить по сети версию на домашнем компьютере и продолжить осмысление программы, если, конечно, есть настроение. Стоит отметить что при обновлении версии по сети передаются только изменения, разница между локальной версией и текущей.

Разбор конфликтов

Командой (svn list -v) можно посмотреть каким пользователем и когда были внесены изменения. Можно посмотребть журнал обновлений (svn log), можно сравнить разницу между версими (svn diff). И произвести откат (svn revert) или слияние версий (svn merge). Подробнее о методах разбора конфликтов, откате, ветвлении и слиянии версий можно прочитать в документации по SVN или в руководстве "Управление версиями в Subversion".

( - )