С чего все начинается

Когда приглашаешь на работу первого программиста, довольно быстро задаешься вопросом, как лучше организовать его труд. Для меня первым шагом к налаживанию работы специалиста стала установка онлайновой системы регистрации и отслеживания ошибок — Mantis (www.mantisbt.org). Она предоставляет удобный интерфейс, для того чтобы можно было отслеживать исправление конкретной ошибки программы и комментировать этот процесс. База данных Mantis располагается на сервере, поэтому для работы нужно лишь подключиться к Интернету.

Если применяется Mantis, то процесс разработки продукта будет происходить так:

  1. Техническое задание разбивается на подзадачи, каждая из которых заносится в Mantis и назначается программисту.
  2. Программист в свою очередь получает список задач (по терминологии системы именуемый ToDo) и выполняет их в соответствии с ним.
  3. Периодически делается сборка программы, которая затем тестируется. Все задачи проверяются. Те, что успешно выполнены, закрываются, а забракованные открываются заново.
  4. Шаги с 1-го по 3-й повторяются до тех пор, пока техническое задание не будет завершено полностью и все задачи не будут закрыты.

Таким образом, Mantis обеспечивает минимум возможностей, позволяющих отслеживать процесс работы над проектом и приблизительно планировать сроки поэтапной сдачи. Но данная система не улучшает работу с текстом программы. Разработчику приходится ждать сборку, в которой аккумулирован десяток-другой изменений. Однако проконтролировать коррективы в тексте программы невозможно. А поскольку вернуться к версиям, сделанным ранее, очень сложно, то приходится постоянно делать резервные копии, скрупулезно отслеживать изменения и внимательно нумеровать каждую новую сборку. Все это осложняет работу над проектом, даже если в ней участвуют лишь два программиста, не говоря уже о целой команде.

С такими недостатками помогает справиться другая система — Subversion. Поэтому я решил объединить Mantis и Subversion. О полученном результате вы узнаете чуть позже, а пока давайте разберемся, что такое Subversion и как с ней работать.

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

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

Что еще нам понадобится

Совсем немного требуется для того, чтобы организовать труд нескольких программистов над одним проектом. Фактически достаточно лишь компьютера с подключением к Интернету. Не нужен даже выделенный IP-адрес. Впрочем, для установки Mantis понадобится самый обычный виртуальный хостинг, стоящий не дороже 5 долл. в месяц. Но он у вас наверняка уже есть.

Для установки системы на сервере каких-то особых навыков не требуется. Сам процесс займет от 20 мин до 1 ч, а разобраться с Mantis можно за один день.

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

Где установить Subversion

В идеале Subversion должна функционировать на сервере, обслуживающем только внутрикорпоративную локальную сеть. Но если все сотрудники работают удаленно (именно так было в моем случае), сервер должен предоставлять доступ к репозиторию через Интернет.

 Рис. 1. Создайте в репозитории базовую структуру каталогов

Если установить Subversion на сервере у провайдера, то доступ к репозиторию можно будет получать 24 ч в сутки, причем с приличной скоростью. Но, увы, у такого подхода есть свои недостатки. Например, если вы разрабатываете коммерческий проект, то похищение исходников может нанести весьма ощутимый урон бизнесу. Дабы защититься от кражи, нужен не виртуальный хостинг, а как минимум виртуальный сервер. Но подобное удовольствие стоит от 30 долл. в месяц. Кроме того, размещение исходников даже на виртуальном сервере не спасет от нечестного администратора, который может переписать весь репозиторий на флэшку прямо с компьютера. И ни один провайдер не будет гарантировать сохранность информации.

Поэтому я решил держать данные у себя на компьютере, работающем под управлением Windows XP. У этого способа есть несомненный плюс – все исходники хранятся только у вас. Но скорость доступа к вашему компьютеру наверняка будет меньше той, которую может обеспечить провайдер, да и работать репозиторий у ваших сотрудников будет только тогда, когда ваша машина включена.

А теперь рассмотрим установку Subversion на компьютер.

Пошаговая инструкция по установке Subversion

Шаг 1. Загрузите необходимое ПО.

Установите сам сервер и клиент для работы с ним. В качестве клиента рекомендую использовать русифицированную программу TortoiseSVN, в ней без труда разберется даже начинающий. Потом загрузите последнюю стабильную версию сервера Subversion с сайта subversion.tigris.org. Клиентское приложение TortoiseSVN, а также русификацию для него возьмите с сайта TortoiseSVN.net.

Еще понадобятся маленькая программа No-IP Client (www.no-ip.com), благодаря которой не нужно иметь выделенный IP-адрес, а также утилиты SVN + Mantis tools, необходимые для создания связки Mantis + Subversion (они выложены на сайте www.icons4swrus.com/?discount=article_svn; прямая ссылка, по которой их можно скачать: icons4swrus.com/images/article-svn/svn-mantis-tools.rar). В состав SVN + Mantis tools входят следующие элементы:

  • post-commit — bat-файл, запускающийся каждый раз во время фиксации изменений и извлекающий данные из репозитория Subversion;
  • SVN+Mantis Shell — моя программа с открытым исходным кодом, которая форматирует полученные данные Subversion в вид, удобный для вставки в Mantis, и отправляет их на сервер;
  • SVN Checkin — модифицированный PHP-скрипт из Mantis, вставляющий комментарий, отправленный из SVN+Mantis Shell.

Шаг 2. Зарегистрируйтесь на No-IP и установите No-IP Client.

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

Итак, зайдите на сайт www.no-ip.com и создайте там бесплатный аккаунт. Затем нажмите кнопку Add Host. В качестве HostName укажите название своей компании. В раскрывающемся списке выберите понравившееся имя домена, например no-ip.biz. Потом установите на компьютере No-IP Client и запишите в настройках данные только что созданной учетной записи. Теперь, для того чтобы кто-то мог обратиться к вашему компьютеру, достаточно указать адрес вроде YourCompanyName.no-ip.biz.

Шаг 3. Установите сервер Subversion и клиент.

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

Шаг 4. Создайте первый репозиторий.

Прежде всего создайте папку C:\svn-store\. Зайдите в консоль (Пуск•Выполнить, cmd) и напишите:

svnadmin create c:/svn-store/my_project

Обратите внимание на то, чтобы слэши были указаны именно так, на манер Unix. В случае успешного создания репозитория никаких ошибок не появится.

Откройте файл C:/svn-store/my_project/conf/svnserve.conf и снимите комментарии в строках:

anon-access = none
auth-access = write

Таким образом вы разрешаете скачивать/закачивать файлы из репозитория только зарегистрированным пользователям, а анонимные вообще не получат доступа к нему. Чаще всего осуществляется именно такая политика.

Данные о пользователях лежат в файле, указанном в строке password-db = passwd. Ее также нужно раскомментировать. Сам файл находится в папке C:\svn-store\my_project\conf, в нем хранятся логины и пароли зарегистрированных пользователей.

Откройте этот файл любым текстовым редактором и создайте в секции users учетные записи пользователей. Формат их таков:

UserName1 = UserPassword1
UserName2 = UserPassword2

Шаг 5. Заполните репозиторий исходными данными.

Чтобы начать совместную работу над проектом, необходимо произвести импорт для начального наполнения вашего репозитория. Создайте папку C:\Repository, а в ней — три пустые подпапки: trunk, branches и tags. Зайдите в папку C:\Repository, щелкните правой кнопкой мыши на свободном месте и в контекстном меню выберите пункт TortoiseSVN•Import.…

В открывшемся окне в качестве URL укажите svn:// YourCompanyName.no-ip.biz/my_project/, который вы определили на втором шаге, плюс имя папки, где хранится репозиторий.

Нажмите OK, введите логин и пароль. Укажите данные, которые вы внесли в файл C:\svn-store\my_project\conf\passwd. Но если окно для ввода логина и пароля не появилось, возвращайтесь к шагу 4, поскольку вы либо не раскомментировали строки, либо не указали логины/пароли.

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

Шаг 6. Настройте Subversion для работы с Mantis.

Создайте временную папку C:\Temp. Выделите папку правой кнопкой мыши и в контекстном меню выберите пункт SVN Checkout…

В качестве значения параметра URL of repository введите svn:// YourCompanyName.no-ip.biz/my_project/. В поле Checkout directory укажите папку C:\Temp. Остальные настройки оставьте без изменений и нажмите OK. В результате в папке C:\Temp появятся три папки, аналогичные созданным на прошлом шаге, и служебная папка .svn. Не трогайте ее в будущем.

Снова нажмите правой кнопкой мыши на C:\Temp и выберите пункт TortoiseSVN • Properties. В появившемся окне выставите свойства так, как показано на рис. 2. Каждый раз, когда будете добавлять новое свойство, обязательно выставляйте галочку Apply property recursively.

Рис. 2. Базовые каталоги успешно добавлены в репозиторий

Опять нажмите правой кнопкой мыши на C:\Temp и выберите SVN Commit… В открывшемся окне введите комментарий, соответствующий ошибке, и нажмите Оk. Программа TortoiseSVN выдаст предупреждение о том, что вы не ввели номер ошибки, но его можно проигнорировать.

Загрузите на сервер скрипт svncheckin.php. Он должен находиться в подпапке core той папки, где установлена Mantis. В результате путь обращения к скрипту будет таким:

http://URL-TO-MANTIS/core/svncheckin.php

В каталоге Mantis на сервере внесите корректировки в файл config_inc.php. Добавьте строки:

$g_source_control_account = 'svn';
$g_source_control_regexp = '/\b(?:bug|issue)\s*[#]{0,1}(\d+)\b/i’;

Теперь зайдите в папку C:\svn-store\my_project\hooks и скопируйте в нее файлы post-commit.bat, svn_checkin_shell.exe и svn_checkin_shell.ini.

Откройте svn_checkin_shell.ini и укажите там правильный путь к svncheckin.php. Проверьте и другие пути в ini-файле. Если вы четко следовали предложенным инструкциям, то ничего исправлять не придется. Если же вы меняли какие-то пути, то их также надо будет подправить в файле post-commit.bat.

Рис. 3. Свойства каталогов, которые нужно задать для правильной работы связки Mantis+Subversion

А сейчас настройте должным образом систему Mantis, которая установлена у вас на хостинге. Войдите в систему под учетной записью администратора, создайте нового пользователя и назовите его SVN Bot. Определите ему права разработчика (Developer) и назначьте на активные проекты. Все автоматические комментарии теперь будут писаться от имени SVN Bot.

Также создайте в проекте новую задачу и назовите ее, например, «Тестирование связки SVN + Mantis». Запомните номер задачи. Импортируйте исходную программу проекта в репозиторий. В папке с проектом щелкните правой кнопкой мыши на свободном месте и выберите пункт TortoiseSVN•Import…

В качестве URL введите svn:// YourCompanyName.no-ip.biz/my_project/trunk.

Обратите внимание, что в конце указана папка trunk. Нажмите Оk.

Рис. 4. Применение настроек

Перенесите данные в репозиторий. Если у вас большой проект и много файлов, то этот процесс скорее всего займет много времени. После того как увидите надпись Completed at revision…, можете вздохнуть с облегчением. Подготовительный этап работ закончился.

Чего удалось добиться

Вы выполнили все необходимые действия, и у вас появился полноценный инструмент для работы с текстом программы. Ежедневная деятельность разработчика теперь сводится к нескольким операциям: обновить рабочую копию (SVN Update), внести изменения в текст программы, отправить сделанные коррективы в репозиторий (SVN Commit).

Рис. 5. Импорт данных

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

  1. Составляется техническое задание, разбивающееся на несколько подзадач, заносимых в Mantis. Помимо того, можно оценить, сколько времени понадобится для решения каждой задачи, и сохранить полученный результат, например, в файле Excel.
  2. Для каждой новой программы создается новый репозиторий Subversion (хранилище для исходных текстов). Кроме того, в Subversion добавляются учетные записи для руководителя и разработчика.
  3. Программист создает у себя рабочую копию репозитория, в которой и работает в дальнейшем.
  4. Выполнив какую-то подзадачу, программист фиксирует изменения (сommit) в репозитории и закрывает задачу в Mantis. Во время их сохранения автоматически производится следующее:
  • в хранилище исходных текстов сохраняются все изменения в исходниках, касающиеся только данной подзадачи;
  • в Mantis на страницу, связанную с данной подзадачей, автоматически добавляется комментарий, в котором указано, кто и когда осуществлял фиксацию и в какие именно файлы были внесены изменения;
  • на почтовый адрес руководителя приходит сообщение об изменениях, сделанных с подзадачей в Mantis.

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

Такой способ организации обеспечивает следующее:

  • над проектом могут работать много специалистов одновременно;
  • тестеру не надо ждать новой версии, а программист тратит меньше времени на то, чтобы ее дополнительно исправить (когда задача открывается заново), поскольку делает это по горячим следам;
  • реализуются все преимущества от использования Subversion (резервное копирование текстов программ, отслеживание изменений, возможность привлечь к работе несколько человек, не имеющих доступа к исходным текстам друг друга и т.д.), а также создается правильно и логично сформированный журнал изменений. Кстати, в большинстве фирм программист добавляет комментарий во время фиксации изменений так, как он хочет. У нас же, помимо применения самого комментария, происходит четкая привязка к подзадаче в Mantis, что даже по прошествии нескольких месяцев помогает понять, зачем делались изменения в текстах;
  • для каждой ошибки автоматически создается история изменений, связанная с нею, что позволяет шаг за шагом проследить, как она исправлялась;
  • в комментариях, автоматически добавляющихся на страницу подзадачи, присутствует номер ревизии, благодаря чему можно прочитать подробное описание подзадачи (а не скупой комментарий при фиксации изменений) и осознанно пересмотреть текст программы.

Желаю вам успехов в работе.


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

Если установить Subversion на сервере у провайдера, то доступ к репозиторию можно будет получать 24 ч в сутки, причем с приличной скоростью. Но, увы, у такого подхода есть свои недостатки. Например, если вы разрабатываете коммерческий проект, то похищение исходников может нанести весьма ощутимый урон бизнесу. Дабы защититься от кражи, нужен не виртуальный хостинг, а как минимум виртуальный сервер.

Вы выполнили все необходимые действия, и у вас появился полноценный инструмент для работы с текстом программы. Ежедневная деятельность разработчика теперь сводится к нескольким операциям: обновить рабочую копию (SVN Update), внести изменения в текст программы, отправить сделанные коррективы в репозиторий (SVN Commit).

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

Для установки системы на сервере каких-то особых навыков не требуется. Сам процесс займет от 20 мин до 1 ч, а разобраться с Mantis можно за один день

Вы выполнили все необходимые действия, и у вас появился полноценный инструмент для работы с текстом программы. Ежедневная деятельность разработчика теперь сводится к нескольким операциям: обновить рабочую копию (SVN Update), внести изменения в текст программы, отправить сделанные коррективы в репозиторий (SVN Commit). Подробное их описание имеется в Интернете