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

StackOverflow https://stackoverflow.com/questions/14373

  •  08-06-2019
  •  | 
  •  

Вопрос

Я конвертирую существующий репозиторий 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 становится магистралью SVN, а все остальные ветви CVS игнорируются.

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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 намного лучше поймет результат.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top