17

Установка Subversion (SVN) на Windows

Subversion (SVN) — свободная централизованная система управления версиями. Необходимый инструмент программиста.


Статья о Subversion в Википедии.

Веб-сайт проекта: http://subversion.apache.org/

Подготовка к установке

  1. Предварительно необходимо установить Apache (отдельно или в составе Zend Server).
  2. Скачать последнюю версию  Subversion для Windows: http://sourceforge.net/projects/win32svn/files/latest/ (на момент написания статьи — версия 1.7.6)

Установка

  1. Запускаем установщик. Здесь все очень просто и прямолинейно. Единственное значимое действие — выбор пути установки. В моем случае это c:\Program Files (x86)\Subversion\.
  2. Добавляем папку c:\Program Files (x86)\Subversion\bin в SYSTEM PATH.
    Открываем Пуск -> Компьютер -> Свойства -> Дополнительные параметры системы ->вкладка Дополнительно -> Кнопка Переменные среды.
    В разделе «Системные переменные» находим переменную Path и нажимаем кнопку Изменить. В конец строки дописываем путь к папке bin. Разделитель путей — точка с запятой «;».
    Кстати, установщик справился с этим заданием сам, так что мне осталось только проконтролировать :)
  3. Из папки c:\Program Files (x86)\Subversion\bin копируем файлы mod_dav_svn.so и mod_authz_svn.so в папку c:\Program Files (x86)\Zend\Apache2\modules, здесь c:\Program Files (x86)\Zend\Apache2 — папка установки Apache.
  4. Далее переходим в папку c:\Program Files (x86)\Zend\Apache2\conf и открываем файл httpd.conf. Находим в нем строки:

    #LoadModule dav_fs_module modules/mod_dav_fs.so
    #LoadModule dav_module modules/mod_dav.so

    и активируем их, т.е. убираем решетку (#) в начале обоих строк.

  5.  Там же добавляем две новые строки:

    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so
  6. В самый конец файла дописываем директиву:
    Include "conf/svn.conf"
  7. Сохраняем httpd.conf.
  8. Теперь необходимо создать папку, в которой будет храниться база данных репозитория. Например E:\_SVN. Создаем ее как обычно через Проводник или любой другой файловый менеджер.
  9. Создаем репозиторий. В командной строке выполняем:
    svnadmin create E:\_SVN
  10. Возвращаемся в папку c:\Program Files (x86)\Zend\Apache2\conf . Создаем в ней новый файл svn.conf (в п.6 мы уже подключили его к httpd.conf) со следующим содержанием:
    <Location /svn>
     DAV svn
     SVNPath E:/_SVN
    </Location>

    В SVNPath указывается путь к папке репозитория.

  11. Чтобы изменения вступили в силу, перезапускаем службу Apache.
  12. Проверяем, что получилось.
    Для этого открываем браузер и вводим в адресную строку: http://localhost/svn/
    Если все правильно, вы должны увидеть надпись:
    svn — Revision 0: /

Выбор структуры.

На этом этапе вы должны решить какой будет структура вашего репозитория. Будет ли в нем хранится несколько проектов или только один. У обоих подходов есть свои плюсы и минусы (подробнее здесь (анг.)). Многопроектный репозиторий легче администрировать, и при этом вы всегда сможете создать отдельный репозиторий для какого-нибудь большого проекта. Лично я предпочитаю хранить проекты в одном репозитории, белее-менее крупная софтверная компания выберет, скорее всего, смешанный вариант.
Чем отличается многопректный вариант от однопроектного? Только структурой папок.
Структура многопроектного репозитория:

/
  project1/
    trunk/
    tags/
    branches/
  project2
    trunk/
    tags/
    branches/
  project3
    trunk/
    tags/
    branches/

Структура однопроектного репозитория:

/
  trunk/
  tags/
  branches/

Подробнее о назначении системных папок:

  • trunk — папка для хранения кода текущего релиза (последняя стабильная версия проекта). Не должна содержать ничего лишнего!
  • tags — папка для хранения версий. Содержит подпапки по номерам версий. Выкладывая новый релиз в trunk всегда делаем копию в tags!
  • branches — папка для работы над новым или экспериментальным кодом (чтобы не затронуть код текущего релиза).

Создаем проект

Вновь открываем командную строку, и выполняем:

svn mkdir -m "Новый проект" http://localhost/svn/project1

Создаем системные папки:

svn mkdir -m "" http://localhost/svn/project1/trunk
svn mkdir -m "" http://localhost/svn/project1/tags
svn mkdir -m "" http://localhost/svn/project1/branches

Проверяем результат из командной строки:

svn list http://localhost/svn/project1

Или открываем в браузере  http://localhost/svn/project1

В обоих случаях вы должны увидеть созданную структуру папок.

Настройка прав доступа

  1. Первый шаг — создание пользователей.
    Открываем командную строку, переходим в папку установки Apache и далее в папку bin:

    cd "c:\program files (x86)\Zend\Apache2\bin"

    В зависимости от типа аутентификации используются разные команды (для Simple — htpasswd, для Digest — htdigest).
    Создаем первого пользователя:

    htdigest -с "e:\_SVN\auth" SVN Max

    Параметр используется для создания файла e:\_SVN\auth.

    Следующих пользователей создаем без параметра  (иначе файл будет перезаписан и мы потеряем всю введенную ранее информацию):

    htdigest "e:\_SVN\auth" SVN Max

    e:\_SVN\auth — это путь к файлу, в котором будет храниться информация о пользователях. Расположение файла может быть любым, но чтобы не запутаться размещаю его в папку репозитория.
    SVN — область (realm) или группа к которой принадлежит имя пользователя. Значение этого параметра запоминаем, т.к. оно еще понадобится.
    Max — имя пользователя.

    После ввода команды, необходимо ввести пароль пользователя, затем повторно подтвердить его.

  2. Удаление пользователя.
    В отличие от htpasswd, htdigest не может удалять пользователя. Поэтому единственный выход — ручное редактирование файла.
  3. Теперь переходим к настройке прав доступа.
    В папке репозитория (e:\_SVN) создаем еще один файл — acl с примерно таким содержанием (используем Блокнот):

    #
    # Группы пользователей
    #
    [groups]
    team1 = Max, Sergey
    
    #
    # Доступ к корню
    # team1 - чтение и запись
    # все остальные - только чтение
    #
    [/]
    @team1 = rw
    * = r
    
    #
    # Доступ к project1
    # team1 - чтение и запись
    # Ivan - чтение и запись (у него доступ только к этому проекту)
    # Dub - доступ запрещен
    #
    [/project1]
    @team1 = rw
    Ivan = rw
    Dub =
    
  4. Вносим изменения в svn.conf:
    <Location /svn>
      DAV svn
      SVNPath e:/_SVN
    
      AuthName "SVN"
      AuthType Digest
      AuthUserFile e:/_SVN/auth
    
      AuthzSVNAccessFile e:/_SVN/acl
    
      # Authorization: Authenticated users only
      Require valid-user
    </Location>

    Обратите внимание на параметр AuthName, его значение должно совпадать с параметром realm, введенном при создании пользователя.

  5. Чтобы изменения вступили  в силу перезагружаем службу Apache.
  6. Проверяем результат. Теперь при открытии репозитория должны запрашиваться имя пользователя и пароль.

Работать с Subversion из командной строки — страшный анахронизм. В следующей статье я покажу как установить и использовать клиент Subversion в популярной среде разработки Eclipse.