SVN загрузить новый репозиторий - PullRequest
0 голосов
/ 13 января 2012

В настоящее время я перемещаю репозиторий из Linux в Windows.Проблема у меня заключается в том, что при загрузке нового хранилища иерархия [reponame]\[reponame].Есть ли способ переместить все папки на один уровень выше?

ОБНОВЛЕНИЕ

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

1 Ответ

0 голосов
/ 13 января 2012

Какова была иерархия хранилища в 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.

...