Subversion — свободная система управления версиями

Subversion («SVN»)

Subversion (также известная как «SVN») является лидером среди систем управления версиями. Основное предназначение — это облегчить путь разработки программных продуктов путем предоставления контроля версий. Примером популярности системы управления версиями SVN служат такие проекты как «Goole Code»(http://code.google.com/), «SourceForge»(http://sourceforge.net/) и др.

Основные возможности системы Subversion (SVN):

  1. Хранение полной истории изменений отслеживаемых объектов (файлов, директорий, символьных ссылок) в централизованном хранилище (репозитории), в том числе при изменении атрибутов («метаданных»), перемещении, переименовании и удалении;
  2. Копирование объектов с разветвлением истории — при копировании в хранилище появляются два отдельных объекта с общей историей;
  3. Поддержка переноса изменений между копиями объектов, в том числе полного слияния копий (в рабочей копии; без объединения истории);
  4. Поддержка ветвления:
    -создания ветвей (копированием директорий) и работы с ними;
    -слияние ветвей (переносом изменений);
  5. Поддержка исторических меток (копированием директорий);
  6. История изменений и копии объектов (в том числе ветви и метки) хранятся в виде связанных разностных копий — «дешёвых» (не требующих больших временны́х и дисковых ресурсов) при создании и хранении;
  7. Поддержка конкурентной (в том числе одновременной, с изоляцией транзакций) многопользовательской работы с хранилищем и, в большинстве случаев, автоматическим слиянием изменений различных разработчиков (в рабочей копии);
  8. Фиксации изменений в хранилище (в том числе многообъектные) организуются в виде атомарных транзакций;
  9. Сетевой обмен между сервером и клиентом предусматривает передачу только различий между рабочей копией и хранилищем;
  10. Обеспечивается одинаково эффективная работа как с текстовыми, так и с двоичными файлами;

Дополнительные возможности Subversion (SVN):

  1. Различные варианты доступа к хранилищу, в том числе, непосредственным доступом на диске, по собственному сетевому протоколу или через веб-сервер по протоколу WebDAV/DeltaV;
  2. Вывод клиента командной строки одинаково удобен и для чтения, и для разбора программами;
    Возможность зеркалирования хранилища;
  3. Два возможных внутренних формата хранилища (англ. repository): база данных или набор обычных файлов;
  4. Интернационализированные сообщения программы (используются настройки локали);
  5. Библиотеки для языков PHP, Python, Perl, Java позволяют встроить функциональность клиента Subversion в программы, написанные на этих языках;
  6. Многоуровневая архитектура библиотек, изначально рассчитанная на клиент-серверную модель;

Subversion, вкратце, система централизованного предоставления доступа к информации. Основой SVN является понятие «Repository»(анг. хранилище) — центральное хранилище данных. Хранилище содержит информацию в виде дерева файловой системы. Любое количество клиентов подключается к хранилищу и потом читают и редактируют файлы. Сохранив данные клиент предоставляет доступ к ним другим клиентам. Отличительной особенностью данного хранилища от файлового сервера является сохранение всех изменений фалов и состава директорий сделанных когда-либо. Поэтому клиент имеет возможность просмотреть не только последнюю версию файлов и директорий, но и запросить к просмотру старые версии.

Зачем это нужно? Дело в том, что когда два клиента начнут редактировать один и тот же сетевой файл, то возникает вопрос: «Чьи изменения будут применены после сохранения?». Есть несколько вариантов решения данного вопроса. К примеру, блокировка редактирования файла, в случае , если уже кто-то производит его редактирование, т.е. программа будет «отслеживать соблюдение очереди» клиентами. Это не очень удобно, к примеру, если оба клиента планируют изменять разные разделы текстового документа. Для этих целей применяется технология «копирование-изменение-слияние». Суть состоит последней состоит: два клиента копируют версию документа для дальнейшего редактирования, после сохранения первым клиентом файла его версия изменяется и на запрос второго клиента сохранить сделанные изменения происходит процесс сравнения двух версий документа и слияние. Данный метод отлично применим для документов, которые позволяют сравнивать ихнее содержимое (текстовые файлы, скрипты, исходники), а для остальных применяется метод «блокирования» (откомпилированные файлы, музыкальные файлы, т.е. бинарные).

Процесс описанный выше организовывается Subversion (SVN) и проходит прозрачно для клиента. Система управления версиями сама определит какой метод работы с содержимым хранилища стоит применить.

Это, если вкратце.

Не будем углубляться в историю и теорию, т.к. достаточно информации можно найти в интернете (к примеру, http://svnbook.red-bean.com/), а приступим к практике.

Подключение к хранилищу Subversion (SVN)

Подключение к хранилищу осуществляется с помощью SVN клиента, которые есть для всех платформ в достаточном количестве в интернете.(http://en.wikipedia.org/wiki/Comparison_of_Subversion_clients).

Допустим, что мы используем SVN клиент:

$ svn checkout «http://host/path with space/project»

Если путь содержит пробелы необходимо его взять в кавычки и клиент сам преобразует все пробелы и запрещенные символы к необходимому формату:

$ svn checkout «http://host/path%20with%20space/project»

Получить доступ к Subversion  можно множеством способов — на локальном диске и через сетевые протоколы, в зависимости от настроек SVN и возможностей SVN клиента. Расположение хранилища всегда URL путь.

Схемы подключения:

  • file:/// доступ к хранилищу на локальном диске;
  • http:// доступ к хранилищу посредством WebDAV протокола для работы с Subversion в Apache сервере;
  • https:// тоже что и http:/, но с шифрованием SSL;
  • svn:// доступ к svnserve серверу;
  • svn+ssh:// тоже что и svn://, но с использованием SSH туннелирования;

Практический пример

Установка Subversion для работы с локальным хранилищем

Буду рассматривать на платформе Linux. Если будут пожелания, я опишу этот процесс касательно Windows.

Я использую утилиты aptitude для установки Subversion на Ubuntu. В свою очередь, Вы должны использовать средства установки Вашей системы. Для установки SVN необходимы права суперпользователя, если они у Вас не имеются выполните команду $ su либо используйте утилиту $ sudo , как это сделал я:

$ sudo aptitude subversion

После успешной установки SVN, создадим хранилище:

$ mkdir /home/<username>/repo , где «username» — имя вашей учетной записи в Linux, а «repo» — директория по Вашему усмотрению

$ svnadmin create /home/<username>/repo

Находим директорию проекта, для которого необходимо обеспечить контроль версий. В моем случае, директория «/home/<username>/workdir/projects/notepad» и переносим ее в хранилище:

$ svn import /home/<username>/workdir/projects/notepad file:////home/<username>/repo/np -m «Notepad project»

Если не указать параметр «-m» запустится редактор по умолчанию, в котором необходимо ввести описание и сохранить.

Поздравляю, теперь можете использовать локальное хранилище.

Использование локального хранилища

Следуем в директорию, в которую будет загружен рабочий вариант нашего проекта из хранилища и выполнить:

$ svn list file:///home/<username>/repo , должен отобразиться список импортированных в хранилище проектов. В Нашем варианте только «np».

$ svn checkout file:///home/<username>/repo/np notepad , должна произойти загрузка рабочего варианта проекта из хранилища в папку «notepad».

Следует отметить, что про любые изменения в рабочем проекте следует сообщать svn клиенту. Все настройки и изменения рабочего проекта хранятся в скрытой папке .svn.

Перечень команд и справку по ним можно получить так

$ svn help

$ svn help <command>

Основные команды Subversion:

$ svn add <filename>

$ svn delete <filename>

$ svn mkdir <directory>

$ svn move …

$ svn copy …

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

Пример работы с локальным хранилищем SVN

(Все имена героев вымышлены и любое совпадение случайно)

Жили-были, команда разработчиков — Николя, Ольоша, Мотфей. Был у них злой и жадный начальник Федор. Заставил начальник разработчиков разбить сутки на 3 отрезка времени, в которые будут работать по очереди все разработчики и купил один компьютер.

Команда была не глупа и сразу установила Subversion c локальным хранилищем по пути file:///repo (см.  svnadmin create).

Создали в папку проекта в этом хранилище file://repo/pobedonosnyj (см. svn import).

И у каждого в домашнем каталоге разместили рабочую версию этого проэкта (см. svn checkout).

Работал-работал Николя «разумный» , как подобает разработчику профессиональному передавая все изменения svn клиенту (см. add, delete, mkdir, move , copy) и по окончанию 8-го часа выполнил команду

$ svn commit -m «Удачи Ольоша» (выполняется для передачи изменений в хранилище).

И быстро убежал в Бар футбол смотреть.

Не успел еще и стул после Николя «разумного» остыть, как пришел и уселся Ольоша «недовольный». Выполнил команду:

$ svn update (обновляет рабочую копию проекта из хранилища)

И обрадовался сколько Николя «разумный» написал.

Альоша тоже  работа-работал, нашел недочеты Николя «разумного», исправил. Пока не успело подъехать такси до хаты, выполнил команду:

$ svn commit -m «Николя, так будет лучше. Я исправил бла-бла-бла» (очень много умных слов и терминов, а также нецензурщина — спать хотелось:-)).

Аналогичная участь постигла и Мотфея «абстрагированного»(уж очень он не полюбил режим работы:-)).

А самое интересное произошло, когда Мотфея «абстрагированного» Николя «разумный» заменил.

Забыл выполнил Николя «разумный» $ svn update , т.к. весело вчера в баре погулял, и начал код править.

Когда пришел в себя, выполнил обновление рабочей версии из хранилища, и ему выдало предупреждение о том, что его новые изменения не совпадают с версией в хранилище. Подумал- подумал и решил, что код, который Олеша исправил не пойдет, а остальные изменения принял (Subversion это позволяет).

В какой-то момент, когда версия кода была где-то 30й, начальник сказал «Необходимо продать заказчику версию 10».

А команде смышленых разработчиков и Subversion это легко :

$ svn update -r 10 (загружает состояние рабочего проекта 10й версии)

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

Умный и щедрый начальник сказал:

— Не бывать плохому рабочему расписанию!

— Каждому разработчику по рабочему компьютеру!

И тут, после организации локальной сети, решили разработчики организовать сетевой сервер Subdivision.

Продолжение следует…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *