Изменить URL-адрес репозитория SVN

116

Моя текущая структура SVN:

Path: .
URL: svn://someaddress.com.tr/project
Repository Root: svn://someaddress.com.tr
Repository UUID: -------------------------------------
Revision: 10297
Node Kind: directory
Schedule: normal
Last Changed Author: ----
Last Changed Rev: 9812
Last Changed Date: 2010-12-20 17:38:48 +0100 (Mon, 20 Dec 2010)

Но наш проект (следовательно, служба SVN) будет работать sub.someaddress.com.trвместо someaddress.com.tr(someaddress.com.tr скоро будет перенаправлен в другое место).

Поскольку это сервер разработки, я не знал, что делать. Мне нужно будет использовать svn switchили svn switch --relocate? Кроме того, мне нужно будет переключить svn root someaddress.com.tr или ветку проекта someaddress.com.tr/project ?

Падший ангел
источник

Ответы:

208

Учитывая, что сервер Apache Subversion будет перемещен на этот новый псевдоним DNS sub.someaddress.com.tr:

  • В Subversion 1.7 или выше используйте svn relocate. Relocate используется при изменении местоположения сервера SVN. switchиспользуется только в том случае, если вы хотите изменить локальную рабочую копию на другую ветку или другой путь. Если вы используете TortoiseSVN, вы можете следовать инструкциям из Руководства TortoiseSVN . При использовании интерфейса командной строки SVN см. Этот раздел документации SVN . Команда должна выглядеть так:

    svn relocate svn://sub.someaddress.com.tr/project

  • Продолжайте использовать, /projectучитывая, что фактическое содержимое вашего репозитория, вероятно, не изменится.

Примечание: svn relocateнедоступно до версии 1.7 (спасибо ColinM за информацию). В более старых версиях вы использовали бы:

    svn switch --relocate OLD NEW
Juanal
источник
36
svn relocate недоступен до версии 1.7. Для svn switch --relocate OLD NEW
версий ниже
Дополнительные ссылки TortoiseSVN очень полезны, спасибо за это
MOnsDaR
Не знал о switchкоманде, вся документация, которую я нашел в Интернете, предназначена для более новых версий.
Дастин Кук
Это удобно, когда мне нужно перейти с URL + ssh на не-SSH или наоборот, например: svn switch --relocate svn + ssh: // _ svn_server _ / _ svn_project _ / _ svn_branch_ svn: // _ svn_server _ / _ svn_vn_branch svn_project _ / _b Последнее особенно полезно, если вы выполняете автоматическую проверку как svn + ssh на нескольких узлах с помощью Jenkins API, а некоторые из них (узлы Windows) не имеют SSH, но вам необходимо войти на машину сборки и вручную выполнить "svn update", чтобы проверить быстрое исправление.
Александр Самойлов
11

Если вы захотите добавить URL-адрес до и после него, вы можете быть спокойны:

svn info | grep URL

  URL: svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
  Relative URL: (...doesn't matter...)

И проверка вашей версии (должна быть> 1,7), чтобы убедиться, svn relocateчто использовать:

svn --version

Наконец, добавив к вышесказанному, если изменение URL-адреса вашего репозитория также включает изменение протокола, вам может потребоваться указать URL-адрес до и после (также см. Здесь )

svn relocate svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
    https://svngate.mycompany.org/svn/repos/trunk/DataPortal

Конечно, все в одной строчке, после чего создается хорошее ощущение, что все прошло гладко:

svn info | grep URL:

Если хотите, немного больше уверенности, новый URL репозитория svn подключен и работает:

svn status --show-updates
svn diff
Фрэнк Нок
источник
5

В моем случае svn relocateкоманда (как и svn switch --relocate) завершилась ошибкой по какой-то причине (возможно, репо не было перемещено правильно, или что-то еще). Я столкнулся с этой ошибкой:

$ svn relocate NEW_SERVER
svn: E195009: The repository at 'NEW_SERVER' has uuid 'e7500204-160a-403c-b4b6-6bc4f25883ea', but the WC has '3a8c444c-5998-40fb-8cb3-409b74712e46'

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

Адрес репо и его UUID сохраняются в .svn/wc.dbфайле базы данных SQLite в вашей рабочей копии. Просто откройте базу данных (например , в SQLite браузере), просмотр таблицы репозитарий и изменить rootи uuidстолбцы значение новых. Вы можете найти UUID нового репо, выполнивsvn info NEW_SERVER .

Опять же, относитесь к этому как к последнему методу.

Мартин Пецка
источник
@IgorGanapolsky: Не могли бы вы уточнить?
Мартин Пека
1
Если вы внимательно прочитали мой пост, я не предлагаю запускать какие-либо команды. Предлагаю отредактировать БД SQLite.
Мартин Пека
Но редактирование базы данных SQLite требует выполнения команд. Команды SQL.
Питер Флинн
Оказывается, вы не можете использовать sqlite; вы должны использовать sqlitebrowser, как было предложено. Weird.
Питер Флинн
1

Если вы хотите зафиксировать новое пустое репо, вы можете проверить новое пустое репо и зафиксировать новое удаленное репо.
Вызов нового пустого репо не удалит ваши локальные файлы.
попробуйте это: например, URL-адрес удаленного репо: https://example.com/SVNTest cd [YOUR PROJECT PATH] rm -rf .svn svn co https://example.com/SVNTest ../[YOUR PROJECT DIR NAME] svn add ./* svn ci -m"changed repo url"

leo.tan
источник
Что это сделает с историей?
MattBianco