Изменить 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
В моем случае 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) и удалите метаданные, затем подключите проект к новому репозиторию. над проектом, щелчок правой кнопкой мыши, команда, отключение