Я преобразую из существующего хранилища 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 игнорируются.
Я особенно заинтересован в сохранении истории коммитов. Если я переименую и переместу ветки в SVN после конвертации, сохранится ли история?
Да. Subversion также отслеживает изменения в структуре каталогов, и вся история версий сохраняется даже при перемещении файла в дереве.
Я рекомендую конвертировать репозиторий с помощью cvs2svn , включая ветки и теги. Когда репозиторий находится в Subversion, вы можете перемещать ветки и теги по своему желанию. Это также сохраняет историю фактических переименованных тегов и ветвей, что может быть интересно в историческом контексте позже.
Ветви Subversion являются каталогами, поэтому вы можете просто переместить ветки после завершения импорта, и история не будет потеряна.
Прошло много времени с тех пор, как я сделал преобразование CVS -> SVN, и, возможно, даже дольше, так как я сделал одно с нетривиальной структурой ветвлений. Поскольку SVN может довольно легко перемещаться по деревьям каталогов, сначала вы можете выполнить полное преобразование, а затем полностью разобраться в структуре ствола / ветвей внутри SVN.
Если вы дошли до этой точки и перемещаетесь по целым деревьям каталогов в SVN, вероятно, лучше всего выполнять коммит после каждого шага переименования / перемещения дерева. Просто что-то иметь в виду.
Я особенно заинтересован в сохранении истории коммитов. Если я переименую и переместу ветки в SVN после конвертации, сохранится ли история?
Некоторая дополнительная информация в поддержку принятого ответа:
cvs2svn не разрешает преобразование из транка в ветку или из ветки в транк
так что перемещение вещей после преобразования в SVN - это лучший способ.
После преобразования можно переместить каталоги стволов и веток, но для этого потребуется явная фиксация SVN после преобразования, которая останется в вашей истории SVN, что сделает исследование истории немного более сложным.
Но вы действительно можете сказать cvs2svn сохранять транк и ветки по желаемым SVN-путям, используя параметр --symbol-hints=symbol-hints.txt
командной строки или (если вы используете файл опций для вашего преобразования) SymbolHintsFileRule('symbol-hints.txt')
правило стратегии символа, где symbol-hints.txt
находится файл, содержащий строки как следующее:
. .trunk. trunk branches/branchX .
. branchX branch trunk .
Обратите внимание, что в некоторых сообщениях коммита, автоматически сгенерированных cvs2svn (например, для создания ветки), будет упоминаться оригинальное имя ветки.
Хотя перемещение по ветвям после преобразования возможно, может быть лучше настроить файл конфигурации cvs2svn, чтобы точно указать имя, которое вы хотите для каждой из существующих веток. Одним из преимуществ этого является то, что FishEye будет гораздо лучше понимать вывод.