Какова была иерархия хранилища в Unix? Вы использовали http там?
Я не на 100% уверен, что ты имеешь в виду. Вы говорите, что хранилище содержит каталог, который содержит имя хранилища? Или вы говорите, что когда вы делаете заказ, вы теперь делаете что-то вроде этого:
C> svn co http://server/foo/foo/trunk
Как теперь выглядит команда оформления заказа?
Когда вы говорите хранилище , вы говорите об одном каталоге хранилища, который вы создали с помощью команды svnadmin create
, или вы говорите о нескольких проектах в одном хранилище?
Допустим, я использую svnserve
для обслуживания своего хранилища. Мы позвоним в мой репозиторий myproj
, и я хочу обслуживать свой репозиторий на моей машине softserve
. Когда я хочу сделать заказ, я делаю это:
$ svn co svn://softserve/trunk myproj-trunk
Обратите внимание, у меня есть только имя моего сервера. URL даже не включает имя моего хранилища. Это потому, что svnserve
может обслуживать только один репозиторий. Если у меня есть несколько репозиториев, мне придется иметь отдельные машины, объединить все репозитории в один репозиторий или использовать разные порты.
Apache может обслуживать несколько репозиториев, но для каждого репозитория нужен виртуальный веб-каталог для доступа, поэтому Apache знает, что при поиске URL-адреса это репозиторий Subversion, а не каталог из каталога httpdocs. Таким образом, в URL-адресе Apache есть по крайней мере еще один каталог.
Существует два способа указать хранилище Apache Subversion. Вы можете указать один репозиторий следующим образом:
<Location /myproj>
DAV svn
SVNPath C:/path/to/repository/myproj
</Location>
<Location /project_two>
DAV svn
SVNPath C:/path/to/repository/project_two
</Location>
В этом случае каждый виртуальный каталог Apache имеет один репозиторий. Таким образом, когда я делаю заказ, моя команда выглядит так:
$ svn co http://softserve/myproj/trunk myproj-trunk
Обратите внимание, что в этом URL есть дополнительная директория над svn URL. Это потому, что теперь мне нужно указать не только сервер, но и виртуальный каталог Apache. В этом случае я согласовал имена виртуальных каталогов с именем своего репозитория. У меня нет причин делать это, но иначе было бы глупо.
Что касается пользователей, они просто добавляют имя хранилища в URL. Это все еще имеет смысл. Если я хочу оформить заказ с myproj
, я использую http://softserve/myproj
, а если я хочу оформить заказ с project_two
, я использую http://softserve/project_two
.
Однако иногда компания может иметь сотни репозиториев Subversion, которые они обслуживают на своем сервере Subversion. Указывать каждый репозиторий в конфигурации Apache сложно, особенно если они продолжают добавлять новые проекты и удалять старые.
Чтобы обойти эту проблему, вы можете использовать спецификацию SVNParentPath
вместо SVNPath
. Это позволяет вам указать не каталог хранилища Subversion, а родительский каталог, в котором он должен находиться:
<Location /source>
DAV svn
SVNParentPath C:/path/to/repository
</Location>
Теперь я могу поместить все свои репозитории в один каталог на моем сервере, и Apache автоматически обслужит их все. Когда создается новый репозиторий, мне нужно только указать его под SVNParentPath
. Мне не нужно изменять конфигурацию Apache.
Проблема в том, что теперь мне нужно указать не только виртуальный каталог Apache, но и имя репозитория. Таким образом, мой URL содержит другой каталог . (В этом случае я назвал свой виртуальный каталог Apache Parent source
).
$ svn co http://softserve/source/myproj/trunk myproj-trunk
Я только что скачал VisualSVN Server и посмотрел на него. Сервер VisualSVN запускает Apache на серверной части. Он просто автоматически настраивает его для вас и создает хороший простой интерфейс. Глядя на созданную конфигурацию Apache под C:\Program Files\VisualSVN Source\conf\httpd.conf
, я вижу это:
Я могу себе представить, когда вы настраиваете VisualSVN, он делает это автоматически. В конце концов, именно поэтому люди будут платить за VisualSVN - он позаботится обо всей обработке хранилища Apache для вас. И, в вашем случае, вы сделали что-то вроде этого:
<Location /foo>
DAV svn
SVNPath C:/path/to/repository
</Location>
И единственный репозиторий в C:/path/to/repository
- это ваш foo
репозиторий. Таким образом, ваш URL выглядит так:
<Location /svn/>
[...]
SVNParentPath C:/Repositories/
[...]
</Location>
Итак, если вы поместите свой foo
репозиторий в C:\Repositories
, ваша проверка выглядит следующим образом:
svn co http://softserve/svn/foo/trunk foo-trunk
Я не поигрался с VisualSVN Server, чтобы посмотреть, смогу ли я изменить svn
Имя виртуального каталога Apache из внешнего интерфейса, но я могу себе представить, что вы купили полную версию, которая допускает дополнительную конфигурацию, и вы назвали свой каталог тем же именем, что и имя вашего хранилища.Таким образом, у вас есть
<Location /foo/>
[...]
SVNParentPath C:/Repositories/
[...]
</Location>
И, когда вы извлекаете из foo
, вы получаете это:
svn co http://softserve/foo/foo/trunk foo-trunk
Двойное имя хранилища, которое вы упомянули.
Я могу представить, что вы можете взломать необработанный файл http.conf
, чтобы использовать SVNPath
вместо SVNParentPath
, и, таким образом, ваш URL будет выглядеть примерно так:
svn co http://softserve/foo/trunk foo-trunk
Но я не знаю, какVisual SVN справится с этим.Я подозреваю, что лучшим вариантом будет просто изменить имя виртуального каталога Apache на значение по умолчанию svn
или изменить его на source
или src
.