Преобразование CVS в SVN и реорганизация филиалов

Я преобразую из существующего хранилища CVS в хранилище SVN. CVS-репозиторий имеет несколько веток, и я хотел бы переименовать ветки при конвертации.

Требуемое преобразование выглядит так:

CVS branch         SVN branch
HEAD       ->      branches/branchX
branchA    ->      trunk
branchB    ->      branches/branchB
branchC    ->      branches/branchC

Таким образом, CVS HEAD становится нормальной ветвью, а CVS branchA становится SVN-транком.

Репозитории CVS и SVN будут находиться на одной машине с Linux.

Как это можно сделать?

Также может быть достаточным преобразование, когда CVS ветвь A становится магистралью SVN, а все остальные ветки CVS игнорируются.

18.08.2008 09:26:17
7 ОТВЕТОВ
РЕШЕНИЕ
Я особенно заинтересован в сохранении истории коммитов. Если я переименую и переместу ветки в SVN после конвертации, сохранится ли история?

Да. Subversion также отслеживает изменения в структуре каталогов, и вся история версий сохраняется даже при перемещении файла в дереве.

Я рекомендую конвертировать репозиторий с помощью cvs2svn , включая ветки и теги. Когда репозиторий находится в Subversion, вы можете перемещать ветки и теги по своему желанию. Это также сохраняет историю фактических переименованных тегов и ветвей, что может быть интересно в историческом контексте позже.

8
18.08.2008 10:08:26
Я использую cvs2svn, но я хочу конвертировать только конкретную ветку и HEAD, но у cvs2svn есть только функция «исключить» для ветвей, но не «включать». Так как мне конвертировать ГОЛОВУ с еще одной веткой?
Oded 24.08.2009 12:39:13
Я полагаю, вы могли бы сбросить все это и использовать затем svndumpfilter, чтобы отфильтровать все, что вы не хотите?
Anders Sandvig 24.08.2009 14:24:01
Я не думаю, что svndumpfilter удаляет не упомянутые ветви. Знаете ли вы о каком-либо другом решении?
Oded 25.08.2009 06:21:44
Не уверен, что вы подразумеваете под "неназванными ветвями", но svndumpfilter имеет параметры --include и --exclude. Если вы скажете cvs2svn использовать "/ trunk", "/ branch" и "/ tags" в качестве корневых папок, извлечение ствола (HEAD из CVS) и определенной ветки может быть выполнено с помощью 'svndumpfilter --include "/ trunk" --include "/ branch / <имя-ветви>" '
Anders Sandvig 25.08.2009 09:08:54

Ветви Subversion являются каталогами, поэтому вы можете просто переместить ветки после завершения импорта, и история не будет потеряна.

1
20.08.2008 07:33:51

Прошло много времени с тех пор, как я сделал преобразование CVS -> SVN, и, возможно, даже дольше, так как я сделал одно с нетривиальной структурой ветвлений. Поскольку SVN может довольно легко перемещаться по деревьям каталогов, сначала вы можете выполнить полное преобразование, а затем полностью разобраться в структуре ствола / ветвей внутри SVN.

Если вы дошли до этой точки и перемещаетесь по целым деревьям каталогов в SVN, вероятно, лучше всего выполнять коммит после каждого шага переименования / перемещения дерева. Просто что-то иметь в виду.

5
18.08.2008 09:34:58

Я особенно заинтересован в сохранении истории коммитов. Если я переименую и переместу ветки в SVN после конвертации, сохранится ли история?

0
18.08.2008 09:59:53

Некоторая дополнительная информация в поддержку принятого ответа:

cvs2svn не разрешает преобразование из транка в ветку или из ветки в транк

так что перемещение вещей после преобразования в SVN - это лучший способ.

1
24.09.2008 19:47:36

После преобразования можно переместить каталоги стволов и веток, но для этого потребуется явная фиксация SVN после преобразования, которая останется в вашей истории SVN, что сделает исследование истории немного более сложным.

Но вы действительно можете сказать cvs2svn сохранять транк и ветки по желаемым SVN-путям, используя параметр --symbol-hints=symbol-hints.txtкомандной строки или (если вы используете файл опций для вашего преобразования) SymbolHintsFileRule('symbol-hints.txt')правило стратегии символа, где symbol-hints.txtнаходится файл, содержащий строки как следующее:

. .trunk. trunk branches/branchX .
. branchX branch trunk .

Обратите внимание, что в некоторых сообщениях коммита, автоматически сгенерированных cvs2svn (например, для создания ветки), будет упоминаться оригинальное имя ветки.

1
17.10.2008 10:09:23

Хотя перемещение по ветвям после преобразования возможно, может быть лучше настроить файл конфигурации cvs2svn, чтобы точно указать имя, которое вы хотите для каждой из существующих веток. Одним из преимуществ этого является то, что FishEye будет гораздо лучше понимать вывод.

1
3.12.2008 18:57:14