Thursday, February 5, 2009

перенос svn репозитория.

Три раза менял vds. Было жалко свой svn репозиторий, и озадачился вопросом его переноса на другую машину.
Оказалось все просто как всегда.

Сначала скидываем репозиторий в dump file.

#svnadmin dump /home/svn/repo/ > /tmp/mysvn.dump


Т.е. svnadmin dump выплевывает dumpfile-formatted строки в stdout, который перенаправляется в наш файл /tmp/mysvn.dump


На другой машине

#scp login@host:/tmp/mysvn.dump /tmp
#svnadmin create /new/repo/path
#svnadmin load /new/repo/path < /tmp/mysvn.dump


Копируем при помощи scp файл себе локально, затем создаем новый репозиторий при помощи svnadmin create , далее командой svnadmin load, которая как раз читает из stdin dumpfile-formatted строки, переносим сдампленные данные.

Хотя в последнее время все чаще смотрю на mercurial, и даже начинаю использовать, пока нравится, но интересно посмотреть на это когда буду работать не один. В случае hg перенос был бы обычным бранчем, который он умеет делать через ssh (Как я думаю, могу и ошибаться).

12 comments:

Вячеслав said...

Спасибо. Заметка очень помогла.

Unknown said...

Не за что. Рад что хоть чем то помог.

kossmak said...

Тоже спасибо =) Стоит отметить, что дамп "выплевывается" довольно большим куском текста. В моем случае 328 ревизий сдампились почти в 540 Мб файлик.

Unknown said...

Тоже не за что, учту про размер, хотя лично я уже перешел на bzr. Гораздо удобнее, хотя целиком его еще не освоил.

AlexWinner said...

Спасибо! На основе вашего поста вообще сделал одну комманду: http://alexwinner.blogspot.com/2010/10/svn.html

Unknown said...

Прикольно. :)

Unknown said...

Если на другой машине уже создан репозитарий в нем лежат несколько проектов. непотрет ли команда
svnadmin load /new/repo/path < /tmp/mysvn.dump существующие проекты в этом репозитарии?
Фактически необходимо обьединить 2 разных репозитария с разных машин.

Unknown said...

Не могу ответить, уже давно ушел с svn. Советую сначала провести небольшой тест на левых репозиториях, и если все пройдет удачно, сдампить основной перед слиянием чтобы не потерять :)

Вот легкое гугление что показывает
http://ru.w3support.net/index.php?db=so&id=267256

F@got@dmin said...

Прочитал ваш пост по поводу переноса SVN сервера. Поправьте меня если я неправильно перечислю своди действия.
Сначала делаю дамп svnadmin dump D:\SVN\svnroot > D:\svn.dump
Дальше на новом сервере создаю новый репозиторий svnadmin create D:\SVN\svnroot
Дальше на новом сервере загружаю дамп со старого сервера, в репозиторий svnadmin load D:\SVN\svnroot < D:\svn.dump

Если все правильно, то подскажите пожалуйста, дело в том что в репозитории старого SVN сервера структура папок совсем другая нежели в новом после восстановления. Например в старом репозитории папки с 4 - проэктами есть, а после восстановления дампа на новый есть только одна папка svnroot в которой есть папка DB куда весь дамп и распаковался, почему не восстановилась иерархия папок? Или так и должно было восстановится? Может что то неправильно делаю? Как проверить? Ведь в папке ДБ только какие то файлы и нет исходников!! Прошу подсказки и помощи! С ув.

Unknown said...

Я не знаю как перенаправление файлов в виндовой консоли работает. Посмотрю сегодня вечером дома. Тогда и отвечу. Если все еще надо будет пишите в жаббер zadoev at gmail dot com

Unknown said...

Дошел до дома перечитал пост внимательно.

На самом деле у вас все сделано правильно только вы немножко запутались.

1. Есть физическая структура репозитория, то где реально хранятся данные. Т.е. вот например команда svnadmin create D:\SVN\svnroot создает всю необходимую инфраструктуру для хранения файлов.

2. Есть сервер который предоставляет интерфейс для работы с этой структурой по какому то протоколу. Обычно используют http сервер + плагин к нему. Вроде бы в svn можно обойтись без сервера работая напрямую клиентом через файловую систему. Если это так то попробуйте

svn checkout file:///d:/svn/svnroot
d:/workcopy

И посмотрите уже обычным файловым менеджером d:/workcopy

В качестве сервера можно еще по моему воспользоваться

svnserve --daemon --root d:\svn\

И сделать уже svn checkout svn://localhost/svnroot d:\workcopy2

Вот ссылочка, похоже на правду.

http://tortoisesvn.net/docs/nightly/TortoiseSVN_ru/tsvn-serversetup-svnserve.html

Ну а про апач для доступа к svn можно нагуглить еще легче

3. Есть клиент, который по протоколу описанному в п.2 взаимодействует с сервером (например tortoisesvn, или просто консольная команда svn)

Далее по порядку, если вы будете разглядывать физическую структуру репозитория эксплорером, или фаром то вы не увидите реальной структуры репозитория. Для этого вам понадобится сервер работающий с репозиторием + клиент. Простейший вариант использования например под windows будет например.

Unknown said...

Хм что то часть комментария потерлась.


В общем поставьте tortoisesvn, и попробуйте в качестве источника указать папку с вашим d:\svn\svnroot и нажать что нибудь вроде browse.

 
Каталог сайтов, Добавить сайт