- PVSM.RU - https://www.pvsm.ru -

Введение в Subversion

image

Разработкой ПО я интересуюсь не так давно, поэтому многие вещи для меня все еще являются тайной, покрытой мраком.
Я открываю для себя много нового, читая такие сообщества, как Хабр.
И вот один раз я открыл для себя SVN, встретив упоминание о ней в одной из статей. На Хабре часто можно найти простые статьи для начинающих, позволяющие сформировать общую структуру явления в голове и разобраться в основах. С SVN вышло иначе, я не нашел введений в эту систему и в итоге читал информацию на других сайтах.

Руководствуюсь принципом «разобрался сам — помоги другому». Я знаю, что на Хабре немало профессиональных программистов, но так же знаю, что тут есть много студентов, а так же людей из других профессий, далеких от IT, но желающих научиться программировать. Поэтому статья посвещена таким как я — новичкам, и призвана привлечь их к использованию такой удобной вещи, как системы управления версиями [1] (еще и бесплатный [2] для студентов, фрилансеров и любителей), а так же рассказывается об использовании SVN в командной разработке посредством сети интернет. Visual SVN использует TortoiseSVN [3] — бесплатный клиент для Subversion.

Оговорюсь, что я знаю про Git — другую систему управления версиями, у которой тут есть даже собственный хабр.
Но почитав и сравнив системы, мне показалось, что SVN для первоначального знакомства с VCS проще. Да и она неслабо обделена вниманием на Хабре. Поэтому речь о ней.

Начну с того, что же это такое.
SVN или Subversion — это бесплатная система управления версиями с открытым исходным кодом. SVN разработала компания CollabNet, Inc., как замену устаревшей CVS. Subversion позволяет управлять файлами и каталогами, а так же сделанными в них изменениями во времени. Это позволяет восстановить более ранние версии данных и изучить историю всех изменений. Доступ к репозиторию SVN может осуществляться как локально, так и посредством сети интернет.

Таким образом, используя Subversion вы можете работать удаленно в команде и не опасаться, что испортите что-то, поскольку SVN предоставляет различные инструменты для совместной работы и имеет решение проблемы разделения файлов.

О проблеме разделения файлов

image
На рисунке очень хорошо показана проблема разделения файлов.
Пользователи Гарри и Салли забирают файл с репозитория. Они оба как-то его редактируют и желают применить изменения. Первым это делает Гарри, после чего это же делает Салли. В результате изменения Гарри в файле пропадают.

Для решения проблемы существуют две основные модели:

  • Блокирование-Изменение-Разблокирование
  • Копирование-Изменение-Слияние

Обе модели можно реализовать средствами Subversion. Подробнее о моделях [4].

Схема общей архитектуры Subversion

image

Чтобы лучше представлять себе, что же такое SVN, можно, например, посмотреть видео с сайта Visual SVN [5].
Поскольку я предоставлю в конце статьи ссылки на более подробное описание работы с SVN, без излишних разглагоствований перейдем сразу к краткому описанию функций на примере Visual SVN.

Функции Subversion

Главное меню в Visual SVN выглядит так:
image
В Show Changes, как вы догадались, можно посмотреть последние изменения в файлах проекта.

Нажав Update вы можете получить последнюю версию измененных файлов (так называемую HEAD-версию), если, например, работаете в команде через сеть и ваш товарищ внес в проект свои правки.

Commit позволяет зафиксировать свои изменения в рабочей копии в хранилище (репозитории).
image
Увеличить [6]

В окошке Message можно написать свой комментарий, например о том, что вы изменили в своем проекте. Этот комментарий будет доступен всем, кто с вами работает. Над полем есть кнопка Recent Messages, она покажет историю последних комментариев.
Ниже поле, в котором можно выбрать файлы, которые будут внесены в репозиторий.

Show Log показывает логи изменений. Там вся информация о том кто и что поменял, какие файлы добавил и комментарии к этим изменениям. Это очень удобное окно, способное показать всю необходимую информацию о ходе работы над проектом.
image
Увеличить [7]

Disk and Repo-Browser открывают проводник локального хранилища и репозитория соответственно.

Create Patch — создать патч. То есть, формируется единый файл-слепок изменений, который вы можете куда-либо передать. Общий репозиторий, таким образом, не обязателен.

Apply Patch — применить изменения из файла-патча на рабочую копию, соотвественно.

Branch позволяет сделать ответвление проекта, чтобы, например, иметь собственную копию всех файлов и делать в них все, что захочется, не подвергая опасности основную копию проекта. Веток можно сделать сколько угодно.
В Visual SVN при нажатии на эту функцию появляется окно, в котором можно указать путь, по которому будет сохранена копия, внести комментарий, а ниже выбрать какую версию проекта скопировать по указанному пути.
HEAD revision — это последняя версия файлов в репозитории. Specific revision — возможность указать старую версию файлов, все изменения нумеруются и это можно посмотреть в логах. Наконец третий пункт позволяет скопировать в ветку вашу рабочую копию проекта.

Switch позволяет перенести рабочую копию в другую директорию репозитория.

Merge [8] — функция, которая дает возможность сравнить несколько различных версий, копий или веток проекта и соеденить их, если потребуется, в рабочей версии. На примере Merge для двух веток: при совпадении файлов, если будет выявлено, что они не одинаковые, появится такое диалоговое окно:
image

Revert Changes — да, вы правильно догадались, это кнопка отмены изменений.

Release Lock — отменить блокировку файлов проекта, если вы что-то заблокировали от изменений.

Update To Revision — применить на рабочую копию одну из версий изменений. Опять же, гибкая система выбора. Можно получить HEAD-версию проекта, то есть с последними изменениями и можно определенную версию (см. Show Log). Так же можно выбрать различные варианты функции в выпадающем списке Update Depth и указать рядом определенные файлы, которые вы хотите получить. То есть можно выбирать, и различные файлы, и различные их версии за всю историю проекта. Это очень удобно и гибко.

Get Solution from Subversion — получить проект из репозитория. Все просто, указываете правильный путь и проект загружается. Это хорошо отображено в том demo Visual SVN [5].
image

Add Solution to Subversion соотвественно добавляет проект в указанный локальный или глобальный репозиторий.

Более подробно о функциях Subversion можно прочесть тут [9].

Напоследок замечу, что TortoiseSVN встраивается в проводник, что позволяет выполнять его функции прямо там. Например, заблокировать файлпапку, чтобы их нельзя было изменить при манипуляциях с SVN.
image

Работа с сетью

Как я упоминал в начале статьи, c Subversion можно работать как посредством сети интернет, так и локально.
Для создания репозитория у себя на компьютере можно скачать Visual SVN Server [10]. Запустив Visual SVN Server Manager нужно кликнуть правой кнопкой мыши по Repositories и можно приступать к созданию репозитория выбрав Create New. Тут описано [11] как вывести репозиторий в интернет.
Но у меня самого динамический IP и куча других проблем с расшариванием сервера с моего компьютера, так что я стал искать обходные пути. И нашел их.
Оказалось в интернете есть сервисы, которые готовы бесплатно предоставить вам репозиторий для SVN.

Я набрел в Google на Assembla [12]. Зарегистрировавшись там, вы получите 1 Gb места под репозиторий. Создав его и настроив вы получите ссылку вида https://subversion.assembla.com/svn/название_репозитория, которую можно использовать в любом SVN клиенте. К примеру, чтобы в Visual SVN добавить свой проект в репозиторий, вам нужно нажать Add Solution to Subversion, после чего указать локальное хранилище вашего проекта, нажать Далее и ввести вашу ссылку. Все, теперь сверху появится панель с основными SVN-функциями (Show Log, Update, Commit, Switch Branch, Branch и Merge) и можно приступать к полноценной работе.
image

В общем и целом сайт позволяет так же настроить репозиторий и получить на неделю или две пробный примиум (платные доп. функции, источник жизни сайта). Основные функции же полностью бесплатны. Чтобы товарищи по команде могли работать с общим для команды репозиторием, на assembla.com, необходима их регистрация на сайте. После регистрации, пользователи могут быть добавлены владельце репозитория в список команды.
На самом сайте можно посмотреть всю информацию о проекте и изменениях, и даже поставить свой баннер с ссылкой.

image
Увеличить [13] Так, например, выглядит страница Stream, где отображаются последние изменения.

image
Увеличить [14] Так же, как и в SVN, можно посмотреть изменения, которые удобно подсвечены маркером.

Таких сайтов не один, некоторые из найденных мною я привожу:

  • Unfuddle [15] — Бесплатный для 2 пользователей, 200 Мб места. Поддерживает SVN и Git.
  • ProjectLocker [16] — Бесплатен для 5 пользователей, 200 Мб места, сколько угодно проектов.
  • BerliOS [17] — Поддерживает CVS, SVN, Mercurial, GIT.
  • Gna! [18] — Поддерживает CVS, GNU Arch, Subversion.
  • Google Code [19] — Subversion, Mercurial репозиторий, вики, трекер вопросов.

Кроме того, тут можно прочесть о SVN более подробно:

P.S. С удовольствием приму в личку или в комментариях указания на возможные неточности и с еще большим удовольствием — дополнения к статье.

Автор: UndeadDragon


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/svn/14664

Ссылки в тексте:

[1] системы управления версиями: http://ru.wikipedia.org/wiki/Система_управления_версиями

[2] еще и бесплатный: http://habrahabr.ru/post/149801/

[3] TortoiseSVN: http://ru.wikipedia.org/wiki/Tortoise_SVN

[4] Подробнее о моделях: http://doc.dvgu.ru/devel/svn/svn.basic.vsn-models.html

[5] видео с сайта Visual SVN: http://www.visualsvn.com/visualsvn/demo/

[6] Увеличить: http://s017.radikal.ru/i418/1209/cc/226ed85708a3.png

[7] Увеличить: http://s61.radikal.ru/i173/1209/8a/6f13a75ec02d.png

[8] Merge: http://habrahabr.ru/post/57591/

[9] тут: http://doc.dvgu.ru/devel/svn/svn.ref.html

[10] Visual SVN Server: http://www.visualsvn.com/server/

[11] Тут описано: http://www.visualsvn.com/support/topic/00022/

[12] Assembla: https://www.assembla.com/

[13] Увеличить: http://s019.radikal.ru/i624/1209/43/71718a030080.png

[14] Увеличить: http://s59.radikal.ru/i166/1209/0d/8a18237d5f2a.png

[15] Unfuddle: https://unfuddle.com/

[16] ProjectLocker: http://www.projectlocker.com/

[17] BerliOS: http://developer.berlios.de/

[18] Gna!: http://gna.org/

[19] Google Code: http://code.google.com/hosting/

[20] Subversion: http://doc.dvgu.ru/devel/svn/index.html

[21] Русская документация по TortoiseSVN: http://tortoisesvn.net/docs/nightly/TortoiseSVN_ru/index.html

[22] Документация Visual SVN: http://www.visualsvn.com/visualsvn/getting-started/

[23] Репозиторий Subversion на своем компьютере: http://icons4swrus.com/subversion-na-svoem-kompyutere.php

[24] Советы, как правильно использовать команду Commit: http://habrahabr.ru/post/20248/

[25] squadette: http://habrahabr.ru/users/squadette/