SVN 1.1 (старая книга) :
Иногда администратор может изменить «базовое местоположение» вашего хранилища - другими словами, содержимое хранилища не меняется, а основной URL-адрес, используемый для доступа к корню хранилища, меняется. Например, может измениться имя хоста, схема URL или любая часть URL, которая ведет к самому хранилищу. Вместо того, чтобы извлекать новую рабочую копию, вы можете заставить команду svn switch «перезаписать» начала всех URL-адресов в вашей рабочей копии. Используйте параметр --relocate, чтобы выполнить замену. Содержимое файла не изменяется, и хранилище не связывается. Это похоже на выполнение сценария Perl над вашей рабочей копией .svn / directory, которая запускает s / OldRoot / NewRoot /.
$ svn checkout file:///tmp/repos test
A test/a
A test/b
…
$ mv repos newlocation
$ cd test/
$ svn update
svn: Unable to open an ra_local session to URL
svn: Unable to open repository 'file:///tmp/repos'
$ svn switch --relocate file:///tmp/repos file:///tmp/newlocation .
$ svn update
At revision 3.
SVN 1,7 (текущая книга) :
svn relocate - перемещение рабочей копии для указания на другой корневой URL-адрес хранилища.
Синопсис
svn relocate FROM-PREFIX TO-PREFIX [PATH...]
svn relocate TO-URL [PATH]
Описание
Иногда администратор может изменить местоположение (или очевидное местоположение, с точки зрения клиента) хранилища. Содержимое хранилища не меняется, но корневой URL хранилища меняется. Имя хоста может измениться, потому что хранилище теперь обслуживается с другого компьютера. Или, возможно, схема URL меняется, потому что хранилище теперь обслуживается через SSL (с использованием https://) вместо обычного HTTP. Существует много разных причин для этих типов перемещений хранилища. Но в идеале, «изменение адреса» для хранилище не должно внезапно вызывать бесполезное использование всех рабочих копий, которые указывают на это хранилище. И, к счастью, это не так. Вместо того, чтобы заставлять пользователей извлекать новую рабочую копию при перемещении хранилища, Subversion предоставляет перемещение svn команда, которая «перезаписывает» административные метаданные рабочей копии для ссылки на новое местоположение хранилища.
Первый синтаксис svn relocate позволяет обновлять одну или несколько рабочих копий, что по существу равнозначно поиску и замене в корневых URL-адресах хранилища, записанных в этих рабочих копиях. Subversion заменит исходную подстроку FROM-PREFIX на строку TO-PREFIX в этих URL. Эти исходные подстроки URL могут быть настолько длинными или короткими, насколько это необходимо для различения между ними. Очевидно, что для использования этой синтаксической формы вам необходимо знать как текущий корневой URL-адрес хранилища, на которое указывает рабочая копия, так и новый URL-адрес этого хранилища. (Вы можете использовать svn info для определения первого.)
Второй синтаксис не требует, чтобы вы знали текущий корневой URL-адрес хранилища, с которым вообще связана рабочая копия, - только новый URL-адрес хранилища (TO-URL), на который он должен указывать. В этой синтаксической форме за один раз может быть перемещена только одна рабочая копия.
Примеры
Начнем с рабочей копии, которая отражает URL локального репозитория:
$ svn info | grep URL:
URL: file:///var/svn/repos/trunk
$
Однажды администратор решит переименовать каталог репозитория на диске. Мы пропустили заметку, поэтому в следующий раз при попытке обновить нашу рабочую копию мы увидим ошибку.
$ svn up
Updating '.':
svn: E180001: Unable to connect to a repository at URL 'file:///var/svn/repos/trunk'
После проверки администратора на торговых автоматах, мы узнаем о перемещаемом хранилище и получаем новый URL. Вместо того, чтобы извлекать новую рабочую копию, мы просто просим Subversion переписать метаданные рабочей копии, чтобы указать новое местоположение хранилища.
$ svn relocate file:///var/svn/new-repos/trunk
$
Subversion мало что говорит нам о том, что она сделала, но, эй, безошибочная операция - это действительно все, что нам нужно, верно? Наша рабочая копия снова работает для онлайн операций.
$ svn up
Updating '.':
A lib/new.c
M src/code.h
M src/headers.h
…
По умолчанию svn relocate будет проходить через любые внешние рабочие копии, вложенные в вашу рабочую копию, и также попытаться переместить эти рабочие копии. Используйте параметр --ignore-externals
, чтобы отключить это поведение.