2015-12-04 3 views
0

У меня есть наследство проект под SVN организован следующим образом:Создание репозитория SVN из существующего модуля, сохраняя историю

Legacy-Repository/trunk/ 
    |- module1 
    |- module2 
    |- ... 
    '- moduleN 

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

New-Repository1/trunk/ (content of module1's directory) 
New-Repository2/trunk/ (content of module2's directory) 
... 
New-RepositoryN/trunk/ (content of moduleN's directory) 

После этой миграции, хранилище «Наследие-Repository» будут заархивированы. Контент в «Legacy-Repository/trunk /», который отсутствует в модуле, не важен и его не нужно переносить.

Каков наилучший способ достижения этой цели (используя командную строку svn)?

Заранее за вашу помощь.

Примечание: Я использую svn 1.7.14.

+0

Является ли путь '/ trunk/moduleXXX' к корню вашего модуля в LEGACY (не obvoius из вашей диаграммы)? –

+0

Да, это так. Все модули находятся в «багажнике» – Kraal

ответ

0

Я думаю, что лучший способ пойти на это - использовать команду svndumpfilter.

В принципе, вам нужно сбросить весь репозиторий (используя команду svnadmin dump) и отфильтровать дамп для создания одного дампа на модуль. Затем вы можете загрузить каждый дамп в новые хранилища SVN, используя svnadmin load.

Вот пример svndumpfilter (fullSvnDump.dmp является полное хранилище свалка):

svndumpfilter include trunk/module1 --drop-empty-revs --renumber-revs <fullSvnDump.dmp> module1.dmp 2> svndump.log & 
+0

Благодарим вас за ответ. Кто-то отказал вам, но без объяснений и альтернативного решения ...: -/ – Kraal

+0

@LazyBadger Я мог бы сказать то же самое из вашего комментария ... У вас есть лучший способ ответить на вопрос @ kraal? Знаете ли вы, что я действительно использовал это решение для того, чтобы делать то, что OP спрашивал, и что он работал нормально. Мой пост, возможно, был более полным с примерами 'svnadmin dump' и' svnadmin load', но использование этой команды действительно прямолинейно (имя команды + URL-адрес репо) ... Это не очень дружелюбный способ приветствовать новые участники ... – AlexRNL

+0

@AlexRNL - Je ne suis pas louis d'orêtre aimé par tout le monde –

0

Сlaims недостатками ответа Алекса

  • svnrdump dump URL/TO/Module вместо svnadnin dump | svndumpfilter include 1) короче 2) не требует полного доступа к серверу
  • svnadmin load не может и не может изменить путь к восстановленной думе р, только изменить «точку монтирования» в другое место с --parent-dir вариант, таким образом: дерево, сбрасываемых в trunk/ModuleN появится после восстановления в корне нового отдельного репо и как trunk/ModuleN, а не просил /

Полированные решения и идеи

  • самосвала каждое поддерево с svnrdump dump (быстрее, меньше занимаемого места)
  • Если «грязная» история не раздражает вас - не забудьте сразу после загрузки дампа в новый репозиторий (не забудьте не менее --ignore-uuid, чтобы предотвратить совместное использование UUID между всеми новыми репозиториями) svn mv trunk/ModuleN к/
  • Если вы хотите чистую историю - вы можете попробовать «взломать» отвалы перед загрузкой (получить правильный path in repo), используя SVN-DumpReloc perl-script (не тестировалось)
+0

Благодарим вас за ответ. Я постараюсь сделать это так и дам вам обратную связь. – Kraal

+0

svnrdump работает нормально, однако SVN-DumpReloc не используется, как есть. В самом деле, он полагается на формат потока дампа v2, а версия используемого svnrdump производит v3-дампы. Мне нужно найти другой способ «переместить» код (вероятно, sed должен выполнить задание) – Kraal

+0

@kraal - удалите проверку версии с кода или замените версию на 3 в '$ head = ~/^ SVN-fs-dump -формат-версия: \ s * 2 \ s * $/' –

Смежные вопросы