Delphi programming blog
Источник: http://teran.karelia.pro/articles/item_4437.html
 

Знакомство с SVN.

Опубликовано 31.08.2010 г. 18:00

Назрела необходимость использовать систему контроля версий для рабочих проектов, поскольку беготня с флешками стала надоедать (: Долгое время ждал появления новой версии плагина SourceConnexion от epocalipse.com для работы с MS Team Foundation Server но видимо не судьба.

Вообще программные разработки у нас достаточно малые, и обычно один проект делает только один разработчик, и системы контроля версий в принципе не требуется. Но есть пара проектов достаточно больших, над которыми работает как минимум 2 человека. Изначально был установлен MS TFS, который позволяет не только версии контролировать, но и вообще управлять процессом разработки с ведением документации и постановкой задач и т.п. Для интеграции данной среды и Delphi существовало два плагина, Athlant & SourceConnexion, первый из которых с 2007го года остановился, а вот второй периодически выходит. В январе 2010, на сайте epocalipse.com была опубликована новость, что плагин для д2010 выйдет в первом квартале. Я добросовестно ждал конца первого квартала и дождался, квартал закончился а плагином и не пахло. Долгие поиски исходных кодов плагина для версии хотя бы д2009, с целью перекомпилировать под д2010 ничего не дали. В июне epocaipse.com опубликовали новую новость, а том что вышла новая версия одного из их плагинов VssConnexion, и скоро появиться долгожданный SourceConnexion. Однако опять прошло 3 месяца а результат нулевой. В свет вышла Delphi XE, а еще не реализован плагин для d2010, имхо использование такого программного обеспечение не представляет никакого интереса. В итоге было решено использовать Subversion (SVN) в качестве системы контроля версий. Поскольку с подобными системами я никогда не общался, то первое знакомство было весьма забавным. В распоряжении имелся сервер под управлением Windows Server 2008. Для организации работы нам потребуется:
  1. Серверная часть SVN. из присутствующих в списке 4х пакетов для win я выбрал VisualSVN.
  2. Для работы с данным сервером можно использовать любой SVN клиент, в моем случае им оказался TortoiseSVN.
  3. Плагин для интеграции Delphi и SVN-клиента. Гугл упомянает о трех основных плагинах которые используют разработчики: JediCodeLibrary VersionControl Expert, Delphi AddIn for TortoiseSVN и DelphiSVN. Последний я почему то не рассматривал в принципе, однако, как выяснилось, эта разработка стала основой для внедрения поддержки subversion в Delphi XE, так что возможно стоило поставить данный плагин.
Установка серверной части проблем собственно не вызывает, по крайней мере в win2008, остается настроить учетные записи пользователей (хорошо использовать win авторизацию), родительскую директорию для размещения корня хранилища и не забыть выдать учетным записям разрешения на чтение/запись директории, если для доступа используются системные учетные записи. Основное что требуется изучить, чтобы использовать svn в delphi это не плагины, а сам TortoiseSVN, поскольку все плагины только вызывают его команды. С установкой данного продукта так же все просто, присутствует русский пакет языков, который надо скачать отдельно. В общих настройках программы можно сразу же в список исключений добавить папки с названием __history, *.dcu файлы, а также *.exe. Может, конечно, и не нужно, но мне по крайней мере данный ход показался вполне логичным. Программа сопровождается достаточно большим файлом справки на русском языке, в котором все подробно описано. Иногда смущают нюансы перевода справки а-ля "check/uncheck" = "отметить/разотметить". Весь функционал программы встраивается в контекстное меню проводника, и является его расширением. С удаленным хранилищем клиент взаимодействует посредством протокола https. Основными рабочими командами являются CheckOut (получение рабочей копии проекта с сервера), update (обновление своей локальной копии до текущей серверной) и commit (подтверждение своих изменений, и сохранение их на сервере). Создав в какой либо папке первый наш проект, сначала необходимо импортировать его на сервер (предварительно можно создать на сервере хранилище для проекта, включая его структуру [brunches/trunc/tags]). При этом ваша версия проекта не становится автоматически текущей рабочей, и надо получить копию проекта обратно с сервера. Получить можно как в новую папку, так и в эту же, перезаписав файлы. Проводник после получения накладывает на значки файлов/папок оверлейные значки, отображающие статусы файлов.
 
Как видно на скриншоте контекстное меню предлагает большинство требуемых функций, так же с помощью shift'а можно вызвать расширенное меню. Стоит отметить, что теперь все действия с файлами, такие как, например, переименование или удаление, стоит делать только через контекстное меню tortoiseSVN. Сразу можно настроить исключения для некоторых папок проекта, чтобы они не отправлялись на сервер. Это имеет смысл, если в вашей директории проекта находятся не только исходные коды, но и например некоторые файлы, которые вообще не изменяются, например может быть какие либо текстовые файлы с данными и т.п, исключения также устанавливаются и настраиваются через меню. Таким образом, общая работа с хранилищем версий сводится к следующему циклу: пользователь получает текущую рабочую версию, проводит свои изменения, если за время его работы, другими пользователями были внесены изменения в другие файлы, то проект понадобится обновить, далее пользователь отправляет свои правки на сервер, при возникновении конфликтов (исправления одинаковых строк, например) пользователь должен их разрешить. Возможен вариант использования блокировки файла, которая блокирует файл на сервер, и запрещает к нему доступ другим пользователем, это требуется например для работы с бинарными файлами, которые не могут быть соединены (merged). Что касается установки плагинов, то я попробовал установить JCL VersionExpert & Delphi AddIn. установка первого проводится с помощь запуска программы инсталлятора, выбора там установки нужного эксперта и все. Для установки второго потребуется скачать исходный код и файл ресурсов. Создать в delphi новый пакет (package), исключить из него добавляемый по умолчанию rtl.dcp, добавить исходный код плагина, файл ресурсов, и подключить пакет designeide.dcp После чего скомпилировать и установить пакет. JCL VE добавляет в главное меню среды пункт Version Control, а для DelphiAddIn появляется пункт TortoiseSVN. Набор пунктов данных меню в принципе повторяют списки контекстных меню проводника для TortoiseSVN. Единственное различие что меню DelphiAddIn менее функциональное и не подлежит настройки. Стоит повториться также, что сами плагины ничего не делают, а лишь передают пользовательские команды в TortoiseSVN. Поэтому нет смысла задумываться по поводу выбора плагина.

Внеся некоторые изменения в редактируемый файл и нажав кнопку commit в DelphiAddIn пользователь получает уведомления, что файл, который мы редактируем, не был сохранен, и предлагает его сохранить. Подтвердив сохранение, пользователь получает стандартное окно Фиксации. При использования фиксации в JCL предупреждения о том, что файл не сохранен не выдается, и исходя из этого в открывающемся окне фиксации пользователь видит сообщение, о том, что фиксировать нечего, поскольку нет изменений в локальном файле. Северная часть позволяет писать всякие триггеры на различные действия. Что может оказаться так же полезным. В общем теоретическую часть немного изучил, практика использования сделает все остальное. Надеюсь использование SVN не вызовет у меня больших затруднений в нестандартных ситуациях.
Метки:  subversion  |  SVN  |  tortoiseSVN 

Комментарии

JayDi
31.08.2010 в 21:11
Также можно отметить такой механизм SVN, как хуки (hooks) -- который нам позволяет контролировать работу с хранилищем. Например, мы можем добавить свои собственные проверки на загружаемый при коммите код, его авто-форматирование или проверку на наличие комментариев.
ter
31.08.2010 в 22:11
именно это я и имел в виду когда писал "триггеры". смысл один. действия по событию. можно при желании запускать компиляцию проекта на сервере при фиксировании и выкладывать exe куда нить. я так понимаю.
runningmaster
01.09.2010 в 00:56
Если начинаете только работать с системой контроля версий кода, то смотрите уже сразу Git и не тратьте свое время на CVS/SVN. Но с другой стороны, как вы тогда словите кайф от гита, если до этого не поработаете в ранее до него популярных системах? :)
Vlad
01.09.2010 в 00:39
Согласен на все 100% с runningmaster. Если будет реальная возможность черезнекоторое время сменить SVN на GIT - меняйте. Сам с git подружился сравнительно недавно, но работа с ним действительно радует. Мне, например, очень кстати пригодилась возможность коммита без доступа к центру. Эта же возможность, кстати, может использоваться и для удобной фиксации изменений вообще. В общем Git - вещЪ :)
ter
01.09.2010 в 00:42
надо почитать что это за зверь :)
какие у него преимущества перед SVN ?
Vlad
01.09.2010 в 01:50
По мне так основное преимущество, как я уже сказал - возможность коммита всегда вне зависимости от того есть доступ к центральному репозиторию или нет, есть инет или нет. Просто делаешь коммиты, сохраняешь изменения, а когда надо слить инфу в репозиторий выполняешь операцию PUSH - все сделанные коммиты летят в центр. Бесплатен :). А в целом более подробно можно глянуть на github.com.
ter
01.09.2010 в 09:01
ну в моем случае сервер разработок с хранилищем данных находится в локальной сети, так что он всегда доступен.
а про GIT почитаю попозже (:
Georgi Fofanov
01.09.2010 в 12:16
Git - это уже распределенная система управления версиями. Так что я бы не стал их напрямую сравнивать.
Vlad
01.09.2010 в 16:33
Georgi Fofanov, согласен. Видимо поэтому не могу однозначно что-либо сравнить :)
runningmaster
02.09.2010 в 02:51
"Все гениальное - просто" (с) - это тоже про Git. http://ru.wikipedia.org/wiki/Git и, как говорится, "без комментариев". От себя добавлю, что Git меняет сознание разработчика.
- Имя
- e-mail*
- Сайт
вы можете использовать теги [i],[b],[code],[quote]
Дополнительно