Изменить URL репозитория SVN

Моя текущая структура 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?

7 ответов

Решение

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

  • С Subversion 1.7 или выше используйте svn 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

Перелистывание 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 repo подключен и работает:

svn status --show-updates
svn diff

Если вы используете клиент TortoiseSVN, вы можете выполнить следующие шаги

Щелкните правой кнопкой мыши исходный каталог и выберите SVN Relocate.

После этого вам нужно изменить URL-адрес на то, что вы хотите, нажмите ОК, это займет несколько секунд.

В моем случае 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), просмотрите таблицу REPOSITORY и измените root а также uuid значения столбца для новых. Вы можете найти UUID нового репо, выполнив svn info NEW_SERVER,

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

Мне было немного больно получать полную инструкцию командной строки. Предложение @Mahi работает, но моя цель состояла в том, чтобы автоматизировать это с помощью командной строки. Вот что сработало для меня:

      svn relocate https://10.29.52.20/svn/src https://10.32.128.41/svn/src --non-interactive --username=myuser--password=mypass --trust-server-cert-failures=unknown-ca,cn-mismatch,expired,not-yet-valid,other w:/src
  • Первый веб-адрес — это «ОТ» или старый адрес.
  • Второй веб-адрес — это «КОМУ» или новый адрес.
  • Подставьте свое имя пользователя и пароль svn вместоmyuserиmypass.
  • Другая сложная часть заключалась в том, чтобы включить путь к исходному коду... который в моем случае былw:/src.

Если вы хотите зафиксировать новый пустой репо, вы можете оформить новый пустой репо и зафиксировать новый удаленный репо.
chekout новый пустой репо не удалит ваши локальные файлы.
попробуйте это: например, 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"

В Eclipse отключите проект (Team> Disconnect) и удалите метаданные, затем подключите проект к новому репозиторию. над проектом, щелчок правой кнопкой мыши, команда, отключение

Другие вопросы по тегам