Помилка перемикача svn - це не одне і те ж сховище


76

Нещодавно я перемістив SVN-сервер, і зараз я намагаюся перенести робочі копії зі свого комп'ютера на новий сервер. Але я отримую найдивнішу помилку. я згоден :

svn switch http://99.99.99.new/svn/company/project/trunk/web

але я розумію

svn: 'http://99.99.99.old/svn/company/project/trunk/web'
is not the same repository as
'http://99.99.99.new/svn/company/project'

переміщення було здійснено за допомогою дампа та імпорту ... а корінь репо знаходиться на http://99.99.99.new/svn/company/project

Ви, хлопці, уявляєте, що може бути не так? дуже дякую

Відповіді:


131

Спробуйте використовувати

svn switch --relocate http://99.99.99.old/svn/company/project/trunk/web http://99.99.99.new/svn/company/project/trunk/web

Як зазначив Споріно в коментарях, починаючи з Subversion 1.7, існує окрема relocateкоманда:

svn relocate http://99.99.99.old/svn/company/project/trunk/web http://99.99.99.new/svn/company/project/trunk/web

1
@Steef, тож URL-адреса повинна бути ідентичною попередній, крім попередньої, щоб вона вказувала на інше місце? Так, наприклад, svn switch --relocate .../project1/trunk/SomeDir .../project2/trunkробота з роботою, правда? Мені потрібно мати svn switch --relocate .../project1/trunk/SomeDir .../project2/trunk/SomeDir?
Євген

1
Починаючи з subversion 1.7, є нова команда relocate, щоб зробити те саме.
Роберт Кюне,

@Eugene Переїзд до нового "базового місця" за допомогою svn switch --relocate http://old.location/svn/project/trunk http://new.location/svn/project/trunk. Це не повинно бути існуючим сховищем. Потім використовуйте звичайну команду перемикання до вашого сховища svn switch http://new.location/svn/projects/project/trunk.
Нікі Вандевурде

23

Крім того, у TortoiseSVN є опція "Перемістити", яку ви повинні використовувати в подібних ситуаціях (замість опції "Переключити").


погодився ... але я був на ubuntu, тому опцій було недоступно :)
Габріель Соломон

7

Мій найкращий спосіб зробити перенесення SVN - це:

svn switch --relocate $(svn info | grep ^URL | cut -f 2 --delim=' ') \
                      new_url_or_repository

Таким чином, використовуючи правильну стару URL-адресу з svn infoкоманди, ви впевнені, що не введете неправильну, яка є однією з найпоширеніших помилок.

Якщо все правильно, вам буде запропоновано вказати деталі автентифікації для нового місця, якщо вони різні.

Після видачі команди переконайтеся, що двічі перевірте, чи було застосовано зміну, дивлячись на параметр URL, який видає

svn info

Після переїзду оновіть свою робочу копію, щоб перевірити, чи все в порядку:

svn update

Мій 2c ..


4

Використовуйте параметр relocateкомандного рядка для switchкоманди.

Документація до SVN-комутатора

Іноді адміністратор може змінити "базове розташування" вашого сховища - іншими словами, вміст сховища не змінюється, але головна URL-адреса, що використовується для доступу до кореня сховища. Наприклад, ім'я хосту може змінитися, або схема URL-адреси, або, можливо, просто шлях, який веде до сховища. Замість того, щоб оформити нову робочу копію, ви можете отримати команду svn switch "переписати" початки всіх URL-адрес у вашій робочій копії. Для заміни використовуйте команду --relocate. Вміст файлу не змінюється, а також не зберігається зв’язок зі сховищем. Це схоже на запуск скрипта perl над робочою копією .svn / каталогів, який запускає s / OldRoot / NewRoot /.


1

Вам потрібно скористатися опцією --relocate:

svn switch --relocate http://99.99.99.new/svn/company/project/trunk/web

див. svnbook для більш докладної інформації.


дякую за пропозицію, але як писав BastardSaint, вам потрібно вказати як від, так і до URL-адрес
Габріель Соломон

1
Ще більше поганого дизайну інтерфейсу, який мене дратує щодо диверсії та SVK. Можуть бути екзотичні випадки використання, які вимагають вказати дві URL-адреси, але інструменти повинні просто взяти проклятий за замовчуванням. Наприклад, у SVK мені НЕ ТРЕБА вказувати джерело та ціль об'єднання, але я це роблю.
Кріс К,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.