Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > УП: Инструменты > SVN: Как перенести папку в другой репозиторий


Автор: Bose 14.3.2008, 18:08
У меня вопрос по SVN. 
Как перенести папку из одного репозитория в другой с сохранением истории изменений? Что-то я никак не могу найти информации по этом вопросу. И возможно ли такое вообще?

п.с. Для работы с репозиторием использую TortoiseSVN.

Автор: Daevaorn 14.3.2008, 18:24
скорей всего это невозможно. у каждого репозитория своя история изменений и что делать, если скопировать данные из одно в другой?

Автор: JackYF 14.3.2008, 18:41
Наваяй скрипт, который вытаскивает ревизии с 1 до HEAD, лог к ревизии и коммитит в другой репозиторий.
Это если очень надо.

Автор: Bose 14.3.2008, 19:46
Цитата(JackYF @  14.3.2008,  18:41 Найти цитируемый пост)
Наваяй скрипт, который вытаскивает ревизии с 1 до HEAD, лог к ревизии и коммитит в другой репозиторий.

идея! но мне не настолько надо.  =)

Желательно было бы штатными средствами.

Автор: smartov 14.3.2008, 20:22
Возможно удастся как-то наколдовать с помощью svn merge, но я не уверен. Надо пробовать
Если с помощью него не удастся, то или скрипт или никак

Автор: maxim1000 14.3.2008, 20:54
Цитата(JackYF @  14.3.2008,  18:41 Найти цитируемый пост)
Наваяй скрипт, который вытаскивает ревизии с 1 до HEAD, лог к ревизии и коммитит в другой репозиторий.

если я не ошибаюсь, отдельного скрипта для этого не нужно: можно воспользоваться "svnadmin dump" и "svnadmin load"
однако, здесь есть ещё одна проблема: всё, что было в корне второго репозитория, попадёт в корень первого, т.е. возможны наложения, так что, наверное, стоит корень второго репозитория перемещать в поддиректорию первого, для этого перед использованием "svnadmin load" нужно позаменять пути (там формат текстовый (ну или почти текстовый - не знаю, как там с бинарниками), так что можно использовать find and replace

сам такого не пробовал, так что мог чего-то не учесть, но вроде выглядит работающе...

Автор: Bose 14.3.2008, 21:04
Цитата(maxim1000 @  14.3.2008,  20:54 Найти цитируемый пост)
если я не ошибаюсь, отдельного скрипта для этого не нужно: можно воспользоваться "svnadmin dump" и "svnadmin load"

Цитата(maxim1000 @  14.3.2008,  20:54 Найти цитируемый пост)
сам такого не пробовал, так что мог чего-то не учесть, но вроде выглядит работающе...


Спасибо за идеи.  Пока что это звучит слишком грозно для меня. 

Автор: JackYF 14.3.2008, 21:11
Цитата(Bose @  14.3.2008,  18:46 Найти цитируемый пост)
Желательно было бы штатными средствами.

дело в том, что это нештатная ситуация smile

Автор: maxim1000 15.3.2008, 00:32
Цитата(Bose @  14.3.2008,  21:04 Найти цитируемый пост)
Пока что это звучит слишком грозно для меня. 

та тут ничего грозного нету
просто "svnadmin dump /path2/repository2 > qqq.txt"
потом "svnadmin load /path1/repository1 < qqq.txt"

а перед этим можно в repository1 в корне создать папкус каким-нибудь неповторимым именем и скинуть туда всё из корня, потом можно выполнять эти две команды, получится в корне созданная папка с предыдущим содержимым корня и остальное из repository2

только перед всеми этими операциями я бы посоветовал скопировать репозиторий или его дамп в безопасное место smile

Автор: Bose 15.3.2008, 16:26
Теперь вопросов стало ещё больше. =)

Цитата(maxim1000 @  15.3.2008,  00:32 Найти цитируемый пост)
та тут ничего грозного нету
просто "svnadmin dump /path2/repository2 > qqq.txt"
потом "svnadmin load /path1/repository1 < qqq.txt"


а где взять svnadmin ?

У меня на компе установлен TortoiseSVN, там такого файла я не нашёл. Доступа к серверу у меня нет. При желании конечно, могу попросить нашего админа пустить "порулить" серваком - но вообще подвергать все исходники риску не хочется.

Цитата(maxim1000 @  15.3.2008,  00:32 Найти цитируемый пост)
только перед всеми этими операциями я бы посоветовал скопировать репозиторий или его дамп в безопасное место

А как сделать это?

Автор: maxim1000 15.3.2008, 23:17
Цитата(Bose @  15.3.2008,  16:26 Найти цитируемый пост)
а где взять svnadmin ?

У меня на компе установлен TortoiseSVN, там такого файла я не нашёл.

а... там, наверное, нету

впрочем, svn можно скачать (достаточно в google набрать subversion и перейти по первой ссылке)
там будут утилиты командной строки, среди них и svnadmin


Цитата(Bose @  15.3.2008,  16:26 Найти цитируемый пост)
При желании конечно, могу попросить нашего админа пустить "порулить" серваком - но вообще подвергать все исходники риску не хочется.

тут вопрос в том, кто у вас занимается репозиториями, ИМХО, эта задача как раз для него


Цитата(Bose @  15.3.2008,  16:26 Найти цитируемый пост)
подвергать все исходники риску не хочется.

тогда стоит сделать так:
svnadmin dump /path1/repository1 > 1.txt
svnadmin dump /path2/repository2 > 2.txt
создать третий репозиторий в нужном месте
svnadmin load /path3/repository3 < 1.txt
svnadmin load /path3/repository3 < 2.txt

при таком подходе доступ к каждому из двух репозиториев осуществляется только на чтение, так что ничего испортить не получится


Цитата(Bose @  15.3.2008,  16:26 Найти цитируемый пост)
А как сделать это?

лучше пользоваться подходом с третьим репозиторием - тогда никакой угрозы нету (ну разве, если пути перепутать)

впрочем, если репозиторий удалённый, то возможно (и вполне естественно), что не у всех будут права на выполнение подобных действий, так что всё-таки лучше обратиться к человеку, администрирующему репозитории

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)