Конвертируйте CVS-репозиторий со смешанной моделью ветвления, используя cvs2svn - PullRequest
0 голосов
/ 07 февраля 2012

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

Проблема заключается в том, что только некоторые каталоги в репозитории CVS разветвлены.Некоторые общие каталоги (включая корневой каталог проекта и Makefile) всегда остаются в HEAD.Это выглядит примерно так:

project/Makefile              # always on HEAD
project/bar/                  # HEAD, Release_01, Release_02, etc
project/config/               # always on HEAD
project/foo/                  # HEAD, Release_01, Release_02, etc
project/Makerules/            # always on HEAD
project/Makerules/Release_01  # always on HEAD, defines branches for Release_01 among other things
project/Makerules/Release_02  # always on HEAD, defines branches for Release_02 among other things

Когда я запускаю преобразование cvs2svn, я получаю все нужные ветки, но общие файлы "всегда на голове" отсутствуют.Вместо этого эти файлы должны присутствовать с содержимым, которое они имели в HEAD во время фиксации ветвления.

Я не уверен, помогает ли это или нет, но официальные сборки делаются на любом теге ветки для всех файловиспользуется в сборке с монотонно увеличивающимся номером сборки (то есть build_123 - это тег, который включает в себя набор файлов из HEAD, а build_124 - это сборка Release_01, которая включает в себя смесь файлов из HEAD и ветви Release_01, а build_125 возвращаетсяко всем файлам HEAD).

Я конвертирую в git, но проблема должна относиться к любому выходному репозиторию.Если есть решение, которое работает только при конвертации в svn, я могу выполнить двухэтапное конвертирование.

Я вижу три возможных подхода к этому:

  1. некоторые комбинации опцийи / или пользовательский код для шага cvs2svn, чтобы заполнить каждую ветвь, отличную от HEAD, файлами, существовавшими в HEAD во время ревизии
  2. , своего рода постобработка вывода cvs2svn перед импортом в git
  3. используйте git-filter-branch для перезаписи истории git после импорта в git

Не хватает простого решения?Должен ли я просто принять несовершенный импорт и двигаться дальше?Сейчас есть только одна активная ветвь (кроме HEAD), но было бы полезно иметь полную и точную историю, чтобы ссылаться на нее.

...