SVN загрузить новый репозиторий
В настоящее время я переношу репозиторий из Linux в Windows. У меня проблема в том, что при загрузке нового хранилища иерархия [reponame]\[reponame]
, Есть ли способ переместить все папки на один уровень вверх?
ОБНОВИТЬ
использовал следующую команду, чтобы получить репозиторий svnadmin load [repo] > [repofile].dump
1 ответ
Какова была иерархия хранилища в Unix? Вы использовали http там?
Я не уверен на 100%, что ты имеешь в виду. Вы говорите, что хранилище содержит каталог, который содержит имя хранилища? Или вы говорите, что когда вы делаете заказ, теперь вы делаете что-то вроде этого:
C> svn co http://server/foo/foo/trunk
Как теперь выглядит команда checkout?
Когда вы говорите, что в репозитории вы говорите об одном каталоге репозитория, который вы создали с помощью 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 есть дополнительный каталог по сравнению с URL-адресом SVN. Это потому, что теперь мне нужно указать не только сервер, но и виртуальный каталог 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
,