Установка 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.

Вливайтесь в общение

19 комментариев

Ваш e-mail не будет опубликован. Обязательные поля помечены *

  1. В следующей статье я покажу как установить и использовать клиент Subversion в популярной среде разработки Eclipse.
    Следующей статьи, по-видимому, не будет=)

  2. Здравствуйте. У меня та же проблема, что и у Виталия, Apache-2.2.11. Обновить до версии 2,4 не могу, т.к. потом не запускается Wamp.exe

    1. C Apache 2.2 должно работать.
      У Виталия была версия 2.0

      Смотрели error.log (Apache2/logs)? Есть там подробное описание ошибки?

  3. Добавил пользователей и права доступа для них как описано здесь. При переходе по localhost/svn/project1 запрашивается логин и пароль. Ввожу логин и пасс как в файлах – дальше не пускает (снова появляется окно ввода логина и пароля).

    1. Попробуйте в настройке прав доступа удалить все лишнее и дать всем пользователям полные права:

      [/]
      * = rw
      1. Так же сделал, все равно не помогает. Окно авторизации продолжает “висеть” и не пускает. svn.conf проверил строчку за строчкой. acl также исправил на “[/]” и второй строкой “* = rw”

            1. В файлах вроде все правильно.

              Попробуйте дописать в svn.conf перед AuthUserFile две строки:

              AuthDigestProvider file
              AuthDigestAlgorithm MD5
              1. Теперь апач не запускается (The requested operation has failed!), и даже лог файл error не создает

                  1. да, сначала 2.0 был. потом я прочел проблему как у виталия была. переустанавливал. окей все заново попробую, на “чистую”

  4. Все получилось… Спасибо большое за статью… :-)

  5. установил Apache на windows XP, прикрутил к нему PHP (вобщем сделал все как по мануалу). При добавлении в httpd.conf следующих строчек
    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so
    Apache перестает запускаться, выдавая ошибку “The requested operation has failed!”. Не подскажите как решить данную проблему?

    1. А эти строки не забыли раскоментировать:
      LoadModule dav_fs_module modules/mod_dav_fs.so
      LoadModule dav_module modules/mod_dav.so
      ?

      И посмотрите error.log (Apache2/logs).
      Там должна быть более полная информация об ошибке.

      1. эти строки тоже раскомментировал. А в error.log он по этому поводу ничего не пишет. Apache версии 2.0.64.

        1. Ясно. Проблема в Apache.
          SVN с версии 1.7.6 поставляется с модулями для Apache 2.2 и 2.4
          Лучше обновить Apache до 2.2