Зміна 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

Враховуючи, що сервер Subversion Apache буде переміщений до цього нового псевдоніма 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

36
svn переїзд недоступний до 1.7. Для попереднього ви б використовувалиsvn switch --relocate OLD NEW
ColinM

Додаткові посилання TortoiseSVN дуже корисні, дякую за це
MOnsDaR

Не знав про switchкоманду, вся документація, яку я знайшов в Інтернеті, призначена для новіших версій.
Дастін Кук

Це стане в нагоді, коли мені потрібно переїхати з + ssh URL до non-SSH або навпаки, наприклад: svn switch - перемістити svn + ssh: // _ svn_server _ / _ svn_project _ / _ svn_branch_ svn: // _ svn_server _ / _ svn_project _ / _ svn_branch_. Останнє особливо корисно, якщо ви робите автоматичну реєстрацію у вигляді svn + ssh на декількох вузлах за допомогою API Jenkins, а деякі з них (вузли Windows) не мають SSH, але вам потрібно увійти до машини збирання та "оновити svn" вручну. перевірити швидке виправлення.
Олександр Самойлов

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 repo підключена та працює:

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

Знову ж, трактуйте це як крайній спосіб.


@IgorGanapolsky: Чи можете ви бути більш конкретними?
Мартін Печка

1
Якщо ви уважно читаєте мій пост, я не пропоную виконувати жодні команди. Я пропоную редагувати БД SQLite.
Мартін Печка

Але редагування БД SQLite включає виконання команд. Команди SQL
Пітер Флінн

Виявляється, ви не можете використовувати sqlite; ви повинні використовувати sqlitebrowser, як пропонується. Дивно.
Пітер Флінн

1

Якщо ви хочете скористатись новим порожнім Repo, ви можете перевірити нове порожнє Repo та взяти на себе нове віддалене репо.
нове порожнє Repo не видалить ваші локальні файли.
спробуйте це: наприклад, віддалений 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"


Що це зробить з історією?
MattBianco
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.