перемещение репозитория в другой подкаталог в svn

Я начну с того, что не удалось выполнить svndumpfilter (используя это решение: Перемещение данных репозиториев SVN с историей в виде подпапок в другой репозиторий) Я получил ошибку:

At line:1 char:30
+ svndumpfilter include \trunk < E:\tmp\test1.dump > E:\tmp\test1filter.dump
+                              ~
The '<' operator is reserved for future use.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : RedirectionNotSupported

после выполнения:

svndumpfilter include \trunk < E:\tmp\test1.dump > E:\tmp\test1filter.dump

Моя проблема: у меня есть несколько проектов в виде отдельных репозиториев как таковых:

RootDir -
     project1
     project2
     project3
     project4
     project5
     project6

3 проекта для одной и той же компании, поэтому я хочу переместить их так:

RootDir -
     project1
     project2
     companyX -
         project3
         project5
         project6
     project4

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

Репозиторий находится на сервере Windows 2012, и я использую удаленный рабочий стол для запуска на нем командной строки svn.

у меня нет идей


person Clonimus    schedule 07.08.2014    source источник
comment
Вторая команда должна быть svnadmin load, а не svnadmin dump   -  person janos    schedule 07.08.2014
comment
На самом деле это выглядит так, как будто вы перемещаете проекты в пределах одного и того же репозитория, а не перемещаете проекты из одного репозитория в другой, верно? Если это так, это не дубликат вопроса о перемещении репозиториев SVN.   -  person Ben    schedule 07.08.2014
comment
опечатка, я на самом деле загрузил svnadmin   -  person Clonimus    schedule 10.08.2014


Ответы (3)


  • svnadmin не может выгружать только поддерево из репозитория и не может использовать логический путь к этому поддереву

svnadmin dump path_to_RootDir\project3 > temp_path_in_disk\dump_file.dmp

сбросит весь репозиторий, из которого надо извлечь project(3|5|6) с svndumpfilter include в один общий дамп. Но можно сбросить поддеревья одной командой с svnrdump dump URL и получить 3 файла без предварительной фильтрации

  • Если вы загружаете дамп, вы должны использовать команду svnadmin load
  • При загрузке вы должны использовать физический путь к корню репозитория, а не логический путь внутри репозитория:

svnadmin load path_to_RootDir < temp_path_in_disk\dump_file.dmp

  • Если вы хотите изменить точку монтирования данных, восстановленных из fump, вы должны использовать опцию --parent-dir подкоманды load

svnadmin load --parent-dir companyX path_to_RootDir < temp_path_in_disk\dump_file.dmp

person Lazy Badger    schedule 07.08.2014
comment
Я попробовал дамп svnadmin my_site.com:8443/svn/test1 › E:\tmp\ test1.dmp › e:/tmp/test.dmp Я получил эту ошибку: svnadmin: E205000: 'my_site.com:8443/svn/test1/' — это URL-адрес, хотя он должен быть локальным путем×Комментарии можно редактировать только для 5 минут×Комментарии можно редактировать только в течение 5 минут×Комментарии можно редактировать только в течение 5 минут - person Clonimus; 10.08.2014
comment
@Clonimus - выгружать и загружать работу с ФИЗИЧЕСКИМ ПУТЬМ в репозиторий в локальной файловой системе, а не с URL-адресами - person Lazy Badger; 10.08.2014
comment
Я сделал svnadmin dump E:\ServerFolders\Development\Repositories\test1 > E:\tmp\test1.dmp, и это сработало, но: svnadmin load E:\ServerFolders\Development\Repositories\test2 < E:\tmp\test1.dmp выдало мне эту ошибку: At line:1 char:63 + svnadmin load E:\ServerFolders\Development\Repositories\test2 < E:\tmp\test1.dmp + ~ The '<' operator is reserved for future use. + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : RedirectionNotSupported - person Clonimus; 11.08.2014
comment
@Clonimus - полный дамп, восстановленный в существующем репозитории (и если содержимое репозиториев связано), может иметь странные эффекты (iftest2 сам по себе полностью функционален) - никогда не пробовал. Попробуйте отфильтровать дамп (оставить только нужные папки) и|или загрузить его с --parent-dir - person Lazy Badger; 12.08.2014
comment
@ Ленивый барсук - спасибо, что значит загрузить его с помощью родительского каталога? как это работает, я не совсем понял из документов. Кстати, test2 - это пустой репозиторий (только структура папок - ствол, теги и ветка) - person Clonimus; 12.08.2014
comment
Я думаю, проблема в том, что исходный project3 — это репозиторий, а project3 в companyX (который является репозиторием) — это просто папка внутри репозитория. - person Clonimus; 12.08.2014
comment
@Clonimus - нет, базовое имя репо в вашем случае ничего не значит. --parent-dir — это НОВАЯ точка монтирования корня для вашего дампа: вы сделали дамп из корня репо, но хотите восстановить его на другой узел (не в корень) - person Lazy Badger; 12.08.2014

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

Похоже, вы перемещаете проекты в одном репозитории, а не между отдельными репозиториями. Если это так, то я думаю, вы просто хотите использовать команду svn mv с двумя аргументами URL. Например. svn mv --parents http://example.com/RootDir/project3 http://example.com/RootDir/companyX/project3 -m "consolidate company X projects". Параметр "--parents" создает промежуточный каталог, если он не существует.

person Ben    schedule 07.08.2014
comment
Просто так svn mv --parents ... - person Lazy Badger; 08.08.2014
comment
Спасибо, добавлю к ответу. В некоторых версиях книги svn нет ссылки на эту опцию :-) - person Ben; 08.08.2014
comment
Я получил эту ошибку svn: E200007: URL-адреса источника и назначения не указывают на один и тот же репозиторий. что глупо. Я использовал в качестве источника: my_site.com:8443/svn/test1/ и в качестве места назначения: my_site.com:8443/svn/tests/mytest1 При первой попытке пункт назначения не был создан (мне было интересно, создаст ли его команда mv ) и со второй попытки я создал его перед выполнением - person Clonimus; 10.08.2014
comment
Хорошо, тогда это, безусловно, похоже на два отдельных репозитория. Вы сказали в своем вопросе, что у вас есть несколько проектов в [вашем] репозитории, но похоже, что на самом деле у вас есть несколько репозиториев на вашем сервере. SVN mv не будет работать между репозиториями. - person Ben; 11.08.2014
comment
@Ben - Так что же будет самым простым способом? Спасибо за ваш ответ - person Clonimus; 12.08.2014
comment
Я думаю, проблема в том, что исходный project3 — это репозиторий, а project3 в companyX (который является репозиторием) — это просто папка внутри репозитория. - person Clonimus; 12.08.2014
comment
Да, точно. Вероятно, вам следует отредактировать вопрос, чтобы прояснить это. - person Ben; 12.08.2014

Проблема заключалась в Windows PowerShell Windows Server 2012.

Я скачал Console 2 и использовал ее вместо оболочки Windows.

Решение, предложенное в "Перемещение данных репозиториев SVN с помощью history как подпапки в другой репозиторий" сделали свое дело.

для моих нужд мне даже не понадобилась часть svndumpfilter.

person Clonimus    schedule 13.08.2014