1. Что такое Subversion

2. Общий принцип работы Subversion

3. Trac и Subversion

4. Установка TortoiseSVN

5. Загрузка файлов в хранилище и управление его структурой средствами TortoiseSVN

6. Создание рабочей копии на локальном компьютере

7. Типичный рабочий цикл


1. Что такое Subversion

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

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


2. Общий принцип работы Subversion

Основные положения

  1. В основе Subversion используется модель "Копирование-Изменение-Слияние":
  2. Для подключение к хранилищу Subversion используют svn-клиент.
  3. Создание локальной копии файлов и каталогов на локальном компьютере (рабочая копия) - этап "Копирование".
  4. Дальнейшая работа с проектом производится вами именно в рамках сохраненной копии - этап "Изменение".
  5. После внесения необходимых изменений личные копии отправляются обратно в хранилище и сливаются в новую версию - этап "Слияние".

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

Примечание 2: модель "Копирование-Изменение-Слияние" основывается на предположении о том, что файлы контекстно-объединяемы, и оно справедливо, если большинство файлов в хранилище — текстовые файлы (например, исходные коды программ).Для файлов же бинарных форматов (графические, аудио-файлы) существует проблема невозможности объединения конфликтующих изменений. Для решения этой проблемы Subversion наделена специальным функционалом, предполагающим доступ к определенному файлу открытым для редактирования для единственного пользователя в конкретный момент времени.


3. Trac и Subversion

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

Так как наша инструкция создана в помощь начинающим пользователям, мы рассмотрим подробно настройку графического svn-клиента под ОС семейства Windows - TortoiseSVN.


4. Установка TortoiseSVN

Основное достоинство этого популярного графического клиентского приложения к Subversion – богатый функционал и удобство использования. Чтобы начать, необходимо:

  1. Скачать программу.
  2. Установить ее на рабочий компьютер.
  3. Перезагрузить компьютер.

Теперь TortoiseSVN работает аналогично плагину программы Проводник в Windows, доступ к нему можно получить, кликнув на нужной директории правой кнопкой мыши - в контекстном меню в списке опций будут представлены дополнительные пункты:


5. Загрузка файлов в хранилище и управление его структурой средствами TortoiseSVN

Чтобы перенести какую-либо директорию (например, project) с локального компьютера в хранилище Subversion для дальнейшего хранения и управления средствами svn, откройте Проводник Windows, кликните правой кнопкой мыши по директории project и выберите пункт меню TortoiseSVN->Import:


Кликните, чтобы увеличить изображение

Для обращения к репозиторию используйте URL http://your-domain.ru/svn, где your-domain.ru - ваш домен. В появившемся окошке в поле URL введите полный путь до каталога в хранилище, в котором вы планируете хранить файлы (в нашем примере это каталог project_1). Если указанного каталога в хранилище нет, он будет создан. В текстовом поле нижней части окна вы можете ввести свой пояснительный комментарий к загружаемым данным:


Кликните, чтобы увеличить изображение

После нажатия OK и ввода верных логина и пароля перед вами откроется:


Кликните, чтобы увеличить изображение

Примечание: считается общепринятым для удобства внутри каждого каталога в хранилище, соответствующего отдельному проекту, создавать 3 каталога: trunk (текущая рабочая версия), branches (сюда рекомендуется помещать готовые, но еще не протестированные версии проекта) и tags (сюда помещаются, как правило, готовые решения, доступные конечным пользователям). Повторимся, это лишь рекомендуемая, но вовсе не обязательная структура, которой нужно придерживаться.

Теперь вы можете посмотреть содержимое вашего хранилища, кликнув правой кнопкой мыши по директории и выбрав Repo-browser:


В появившемся окне введите путь до корневого каталога вашего хранилища (http://your-domain.ru/svn). В результате появится окно, в котором содержимое всего репозитория будет представлено в виде древовидной структуры:


Кликните, чтобы увеличить изображение

Нажатием правой кнопки мыши перед вами открывается возможность управления хранилищем:

  • добавлять и удалять элементы;
  • скачивать элементы в свою локальную рабочую копию;
  • копировать элементы как обычные файлы или каталоги.

Помимо структуры хранилища, в окне Repo-browser’а отображается несколько столбцов, которые описывают спойства элементов данной структуры:

  • Extension – если элемент является файлом, в этом столбце напротив него будет отображаться его расширение, если элемент является каталогом - ничего отображаться не будет;

  • Revision – номер правки соответствующего элемента хранилища. Правка представляет собой "снимок" хранилища в конкретный момент времени. При создании хранилища Subversion оно начинает свое существование с правки 0, и каждая последующая фиксация увеличивает номер правки на единицу. В любой момент времени, если вам нужно будет сослаться на какую-либо правку, вы сможете сделать это, нажав на кнопку "HEAD" в верхнем правом углу. В появившемся окошке переставьте флажок на "Revision" и введите в поле справа номер правки, которую вы хотите посмотреть. Помните, что просматривать ревизии (версии и различия между ними) можно и через web-интерфейс системы Trac:


  • Author – автор текущей правки;
  • Size – размер элемента;
  • Date – время модификации элемента, соответствующей номеру правки, указанной в столбце Revision;
  • Lock – показывает, заблокирован ли файл для редактирования.

Примечание: при любых изменениях, касающихся добавления/удаления элементов в хранилище, производимых вами описанным выше способом, то есть напрямую через Repo-browser, это никак не отобразится в локальных рабочих копиях пользователей. Для того чтобы эти изменения стали видны в рабочей копии, пользователь должен связаться с хранилищем и скачать обновленную версию на компьютер. О том, как это сделать, будет рассказано далее.


6. Создание рабочей копии на локальном компьютере

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


В появившемся диалоговом окне необходимо указать путь к данным, которые вы желаете скачать в рабочую копию; также есть возможность изменить путь к рабочему каталогу, если это необходимо:


Кликните, чтобы увеличить изображение

В результате вам будет представлено примерно следующее:


Кликните, чтобы увеличить изображение

По нажатию правой кнопки мыши на каталоге, содержащем рабочую копию, а также на ее элементах (они отмечены "галочкой"), вам представляются дополнительные опции:


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


7. Типичный рабочий цикл


7.1 Операция получения данных из хранилища

Откройте в Проводнике Windows каталог, содержащий рабочую копию данных, кликните правой кнопкой мыши по каталогу с рабочей копией. Выберите пункт меню SVN Update:


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

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


7.2 Внесение каких-либо изменений внутри самих файлов рабочей копии

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


7.3 Внесение изменений в структуру проекта

Эти операции удобнее всего проводить через контекстное меню:

  • Добавить файл. Выберите пункт меню Add

Кликните, чтобы увеличить изображение

В появившемся диалоговом окне отметьте выбранные для добавления файлы:


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

Примечание: svn-клиент может только добавлять или удалять элементы, создавать файлы самостоятельно он не может.

  • Удалить файл. Для удаления файла выберите пункт меню Delete, после чего файл будет удален из рабочей копии (аналогично удаляются каталоги):

Кликните, чтобы увеличить изображение

  • Переименовать файл. Для этого нужно выбрать пункт меню TortoiseSVN -> Rename. При этом создастся копия исходного файла с таким же содержанием, но с новым именем. Если исходный файл вам не нужен, удалите его. Действия с каталогами производятся аналогично.


7.4 Анализ изменений

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

TortoiseSVN также предоставляет средства для просмотра подобной информации (каким локальным изменениям подвергались элементы копии, не связываясь с хранилищем) – пункты show log и check for modifications:


Кликните, чтобы увеличить изображение


Кликните, чтобы увеличить изображение


Результаты show log и check for modifications:


Кликните, чтобы увеличить изображение


Кликните, чтобы увеличить изображение

2). Команда svn diff формирует свой вывод, сравнивая ваши рабочие файлы с кэшированными "нетронутыми" копиями из .svn. Весь текст запланированных для добавления файлов показывается как добавленный, а весь текст запланированных для удаления файлов показывается как удаленный. TortoiseSVN предлагает для подобного анализа опцию Create patch:


Кликните, чтобы увеличить изображение

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


В результате нами будет получен файл патчей:


Кликните, чтобы увеличить изображение

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

3). Команда svn revert позволяет откатить файл в состояние, предшествующее модификации, путем замены файла его кэшированной "первоначальной" копией из .svn-области. Кроме того, консольная версия данной команды позволяет "откатить" изменения на определенную ревизию. Подробнее об этой команде в руководстве по Subversion.
TortoiseSVN имеет в своем арсенале 2 функции – Revert и Update to revision. Первая просто "откатывает" файл в состояние, предшествующее модификации. Вторая позволяет "откатиться" на определенную ревизию. Ниже представлен пример команды Revert (мы возвращаем файл binary.exe и отменяем добавление файла 1.txt в Subversion):


Кликните, чтобы увеличить изображение

Отмечаем файлы, которые нужно "откатить":


Кликните, чтобы увеличить изображение

7.5 Cлияние своих изменений с изменениями в хранилище

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

Рассмотрим случай, когда одновременно с вами другой пользователь редактирует файл, например, sources/README.txt. При выполнении SVN Update будет получено следующее сообщение:


Кликните, чтобы увеличить изображение

Это означает, что изменения, внесенные вами, перекрылись с изменениями, внесенными в хранилище до вас. В этом случае будет создано несколько экземпляров файла README.txt:

  • README.txt - в нем будут иметься ваши и чужие изменения, помеченные специальными маркерами;
  • README.txt.mine – файл вашей рабочей копии с вашими изменениями;
  • README.txt.r53 – файл, соответствующий предыдущей ревизии (53 в нашем примере);
  • README.txt.r54 – файл, соответствующий новой ревизии (54 в нашем примере).

Теперь вам необходимо разрешить этот конфликт и уведомить об этом Subversion. Вы можете либо отменить свои изменения, либо отменить чужие, либо каким-то образом скомбинировать свои и чужие изменения (Subversion только уведомляет о конфликте, процедура разрешения же полностью под вашим контролем). После того как вы закончили разрешение конфликта, вы уведомляете об этом Subversion выполнением команды Resolved:


Кликните, чтобы увеличить изображение

Отмечаем файлы, в которых конфликт разрешен, и нажимаем ОК:

7.6 Отправка изменений в хранилище

Выполняем команду SVN Commit:


Добавляем необходимые комментарии:


Кликните, чтобы увеличить изображение

Простейший рабочий цикл на этом закончен:


Кликните, чтобы увеличить изображение

Вы ознакомились с наиболее часто задаваемыми вопросами, но не нашли нужного ответа? Или информации на сайте оказалось недостаточно?

Тогда напишите нам!

*Ваш e-mail:

 Номер вашего Лицевого счета:

 Категория вопроса:

*Вопрос:

*Введите отображаемый код: