Глава 3. Хранилище

Содержание

Создание хранилища
Создание хранилища при помощи клиента командной строки
Создание хранилища при помощи TortoiseSVN
Локальный доступ к хранилищу
Доступ к хранилищу на сетевом ресурсе
Организация данных в хранилище
Резервирование хранилища
Cкрипты ловушек, выполняемые на стороне сервера
Ссылки для извлечения
Доступ к хранилищу
Сервер на основе Svnserve
Введение
Установка svnserve
Запуск svnserve
Элементарная аутентификация в svnserve
Улучшение безопасности при помощи SASL
Аутентификация при помощи svn+ssh
Авторизация с учётом пути в svnserve
Сервер на основе Apache
Введение
Установка Apache
Установка Subversion
Настройка
Работа с несколькими хранилищами
Авторизация с учётом пути
Аутентификация при помощи домена Windows
Множественные поставщики аутентификации
Защита сервера при помощи SSL
Использование клиентских сертификатов с виртуальными SSL-узлами

Каким бы протоколом вы ни пользовались для доступа к своим хранилищам, вам в любом случае потребуется создать хотя бы одно хранилище. Это может быть сделано как при помощи клиента Subversion для командной строки, так и при помощи TortoiseSVN.

Если вы ещё не создали хранилище Subversion, самое время этим заняться.

Создание хранилища

Вы можете создать хранилище или в формате FSFS, или в более старом формате Berkeley Database (BDB). Формат FSFS обычно быстрее и более лёгок в администрировании, также он сейчас без проблем работает на сетевых разделяемых ресурсах и в Windows 98. Формат BDB одно время рассматривался как более стабильный - просто потому, что использовался дольше, но, поскольку FSFS используется для реальной работы вот уже несколько лет, это соображение теперь не существенно. Прочтите Choosing a Data Store (Выбор формата хранилища) в Книге о Subversion для дополнительной информации.

Создание хранилища при помощи клиента командной строки

  1. Создайте пустую папку с именем SVN, (например, D:\SVN\), которая будет корневой папкой для всех ваших хранилищ.

  2. Создайте другую папку MyNewRepository внутри D:\SVN\.

  3. Откройте командную строку (или окно эмуляции DOS), перейдите в D:\SVN\ и введите

    svnadmin create --fs-type bdb MyNewRepository
    

    или

    svnadmin create --fs-type fsfs MyNewRepository
    

Теперь у вас есть новое хранилище, расположенное в D:\SVN\MyNewRepository.

Создание хранилища при помощи TortoiseSVN

Рисунок 3.1. Меню TortoiseSVN для неверсированных папок

Меню TortoiseSVN для неверсированных папок

  1. Откройте Проводник Windows

  2. Создайте новую папку и назовите её, например, SVNRepository

  3. Щёлкните правой кнопкой мыши на вновь созданной папке, и выберите TortoiseSVNСоздать здесь хранилище....

    Хранилище будет создано внутри новой папки. Не редактируйте эти файлы самостоятельно!!!. В случае возникновения ошибок убедитесь, что папка пуста и доступна для записи.

Подсказка

TortoiseSVN больше не предоставляет возможность создавать хранилища, использующие BDB, хотя их всё ещё возможно создать при помощи клиента командной строки. Хранилища FSFS обычно более легки в обслуживании, а также делают для нас более лёгкой поддержку и TortoiseSVN - из-за проблем с совместимостью разных версий BDB.

Будущие версии TortoiseSVN не будут поддерживать доступ к хранилищам BDB при помощи file:// из-за этих проблем с совместимостью, хотя TortoiseSVN, конечно, будет поддерживать этот формат хранилища при доступе к серверу по протоколам svn://, http:// или https://. По этой причине, мы настоятельно рекомендуем, чтобы все новые хранилища, доступ к которым должен осуществляться при помощи протокола file://, создавались в формате FSFS.

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

Локальный доступ к хранилищу

Для доступа к вашему локальному хранилищу вам необходим путь к этой папке. Только запомните, что Subversion принимает все пути к хранилищам в виде file:///C:/хранилищеSVN/. Обратите внимание, что везде используется прямая косая черта.

Для доступа к хранилищу, находящемуся на сетевом разделяемом ресурсе, вы можете подключить этот ресурс как диск, или использовать путь UNC. Пути UNC используются в виде file://ИмяСервера/путь/к/хранилищу. Обратите внимание, что здесь только 2 ведуших прямых косых черты.

В версиях SVN до 1.2, пути UNC имели более запутанный вид file:///\ИмяСервера/путь/к/хранилищу. Хотя этот вид до сих пор поддерживается, использовать его не рекомендуется.

Внимание

Не создавайте и не обращайтесь к хранилищу на основе Berkeley DB, которое находится на разделяемом сетевом ресурсе. Оно не может существовать в рамках удалённой файловой системы. И даже в том случае, если у вас назначена буква для сетевого диска. Если вы пытаетесь использовать Berkeley DB на разделяемом сетевом ресурсе, результаты непредсказуемы - вы можете увидеть загадочные ошибки сразу же, или могут пройти месяцы, прежде чем вы обнаружите, что база данных хранилища коварно испорчена.

Доступ к хранилищу на сетевом ресурсе

Хотя в теории возможно разместить хранилище FSFS на сетевом ресурсе и предоставить доступ нескольким пользователям посредством протокола file://, это то, что совершенно точно не рекомендуется делать. На самом деле мы весьма не одобряем этого, и такое использование нами не поддерживается.

Во первых, вы предоставляете каждому пользователю непосредственный доступ на запись к хранилищу, и любой пользователь может случайно удалить всё хранилище или испортить его каким-либо другим способом.

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

В третьих, разрешения на доступ к файлам должны указываться очень аккуратно. Возможно, вам удастся это сделать на "родном" разделяемом ресурсе Windows, но на SAMBA это особенно трудно.

Доступ при помощи file:// предназначен только для локального использования одним пользователем, особенно для тестирования и отладки. Когда вы желаете предоставить общий доступ к хранилищу, вам на самом деле необходимо настроить подходящий сервер, и это не настолько сложно, как вы можете подумать. Прочтите «Доступ к хранилищу» для рекомендаций по выбору и настройке сервера.

Организация данных в хранилище

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

Есть несколько стандартных рекомендуемых способов организации хранилища. Большинство людей создают папку trunk, в которой ведётся «основная линия» разработки, папку branches, содержащую копии ответвлений, и папку tags для копий меток. Если хранилище содержит только один проект, тогда их часто создают как папки верхнего уровня:

/trunk
/branches
/tags

Если хранилище содержит несколько проектов, их часто упорядочивают по ответвлениям:

/trunk/paint
/trunk/calc
/branches/paint
/branches/calc
/tags/paint
/tags/calc

...или по проектам:

/paint/trunk
/paint/branches
/paint/tags
/calc/trunk
/calc/branches
/calc/tags

Упорядочивание по проектам имеет смысл, если проекты не сильно связаны, и каждый из них извлекается индивидуально. Для связанных проектов, где вы можете пожелать извлекать все проекты за раз, или где все проекты связанны друг с другом в один распространяемый пакет, часто лучшим является упорядочивание по ответвлениям. В этом случае у вас только один ствол для извлечения, и легче видимы взаимосвязи между подпроектами.

В случае принятия подхода, когда /trunk /tags /branches - папки верхнего уровня, незачем говорить, что для каждого ответвления и метки копируется весь ствол, и в некотором роде эта структура предоставляет наибольшую гибкость.

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

Конечно, вы вольны игнорировать эти обычные схемы. Вы можете реализовать любые виды изменений - всё, что лучше работает для вас или для вашей команды. Помните, что выбранный вами вариант не является чем-то незыблемым. Вы можете реорганизовать хранилище в любое время. Поскольку ответвления и метки - это обычные папки, TortoiseSVN может перемещать или переименовывать их, как вы пожелаете.

Переход с одного способа организации на другой - это вопрос выполнения серии перемещений на сервере. Если вам не нравится, как организованы данные в хранилище, просто переставьте папки.

Итак, если вы пока ещё не создали основную структуру папок в вашем хранилище, это надо сделать сейчас. Есть два способа этого достичь: если вы просто желаете создать структуру /trunk /tags /branches (/ствол /метки /ответвления), вы можете воспользоваться обозревателем хранилища для создания этих трёх папок (за три отдельных фиксации). Если же вы желаете создать более разветвлённую иерархию, то проще сначала создать структуру папок на диске и импортировать её за одну фиксацию, вот так:

  1. создайте новую пустую папку на вашем жёстком диске

  2. создайте желаемую структуру папок верхнего уровня внутри этой папки - но пока не помещайте в них никаких файлов!

  3. импортируйте эту структуру в хранилище путём правого щелчка на папке и выбора TortoiseSVNИмпортировать... Тем самым вы импортируете вашу временную папку в корень хранилища и создадите основу для организации данных хранилища.

Обратите внимание: сама папка, которую вы импортируете, в хранилище не появляется, только её содержимое. Например, создайте следующую структуру папок:

C:\Temp\New\trunk
C:\Temp\New\branches
C:\Temp\New\tags

Импортируйте C:\Temp\New в корень хранилища, который станет выглядеть следующим образом:

/trunk
/branches
/tags