Введение в Subversion

в 7:23, , рубрики: subversion, svn, Visual Studio, разработка, Системы управления версиями, метки: ,

image

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

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

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

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

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

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

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

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

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

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

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

image

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

Функции Subversion

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Я набрел в Google на Assembla. Зарегистрировавшись там, вы получите 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
Увеличить Так, например, выглядит страница Stream, где отображаются последние изменения.

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

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

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

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

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

Автор: UndeadDragon

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js