Как при использовании cvs2svn переименовывать символы так, чтобы ветка и тег имели одно и то же имя?

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

  •  03-07-2019
  •  | 
  •  

Вопрос

Я работаю над преобразованием репозитория CVS, который имеет следующие символы (среди прочих):

tcm-6.1.0-branch -- отделение
tcm-6.1.0 -- тег

Используя стандартные преобразования cvs2svn, они правильно идентифицируются.Тем не менее, я хотел бы сделать некоторую очистку во время преобразования.В частности, я хотел бы удалить избыточную часть символа ветки «-branch», поскольку она будет находиться в каталоге «ветви» в svn.Я добавил следующее в символ_трансформы проекта:

RegexpSymbolTransform(r'(.*)-branch', r'\1')

Теперь я получаю «ОШИБКА:Несколько определений символа «tcm-6.1.0» в ...» для каждого файла, поскольку tcm-6.1.0 является одновременно веткой и тегом.У меня есть несколько пар символов CVS, которые приводят к этой проблеме.

Мне кажется, что, поскольку исходные символы разные и каталоги назначения разные, эта операция должна быть возможной.Я что-то упускаю или это просто недостаток cvs2svn?

Как я могу переименовать эти символы так, чтобы они оставались отдельными и приводили к созданию ветки и тега с тем же именем?

--

Если обходного пути нет, я постараюсь исключить проблемные символы из правил преобразования и впоследствии переместить их вручную, хотя я бы предпочел сделать это во время преобразования.

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

Решение

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

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

Вместо этого вам следует преобразовать ветку с ее первоначальным именем, но затем указать cvs2svn сохранить ее по пути SVN /branches/tcm-6.1.0.Таким образом, символ окажется в нужном месте для ветки SVN с желаемым именем, но cvs2svn по-прежнему будет обрабатывать его как отличие от тега с таким же именем.

Это можно сделать с помощью --symbol-hints=symbol-hints.txt параметр командной строки или SymbolHintsFileRule('symbol-hints.txt') правило символьной стратегии, где symbol-hints.txt это файл, содержащий следующую строку:

.tcm-6.1.0-ветвь ветки /branches/tcm-6.1.0 .

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

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

cvs2svn выполняет много магических действий между cvs и svn.Вот почему вы не можете «сопоставить» имена ветвей и тегов, так как тогда cvs2svn не будет знать, какая версия к какому каталогу принадлежит.Мой совет — переименовывать их впоследствии в одном коммите с помощью такого инструмента, как свнмукк.Итак, у вас есть один коммит, и тогда все на месте.

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