Переход с CS-RCS на Mercurial - PullRequest
       52

Переход с CS-RCS на Mercurial

3 голосов
/ 21 августа 2010

Я уже много лет использую CS-RCS Basic в ComponentSoftware для управления различными проектами для одного разработчика. Это сработало очень хорошо для меня, но теперь я хочу перейти на современную систему контроля версий, и после изучения моих вариантов я выбрал Mercurial.

Проблема в том, что я всегда использовал центральный репозиторий для CS-RCS, и теперь я хотел бы использовать отдельные репозитории Mercurial для отдельных проектов, сохраняя историю из моего репозитория RCS.

После некоторого углубленного поиска в Google я пришел к выводу, что единственный способ сделать это - преобразовать мой RCS-репозиторий в отдельные CVS-репозитории, а затем преобразовать их в Mercurial. Эти два сайта были, вероятно, наиболее полезными:

В соответствии с идеей Джеффа Этвуда о том, чтобы задавать и отвечать на мой собственный вопрос, я собираюсь ответить на этот вопрос для всех, кто застрял в этой ситуации, и на случай, если мне придется найти его позже. Как вы увидите, хотя я и нашел решение, оно неуклюже и имеет по крайней мере одну существенную проблему. Если у кого-то есть какой-нибудь лучший метод, я бы, конечно, хотел бы услышать об этом.

Ответы [ 2 ]

1 голос
/ 21 августа 2010

Вот метод, который я придумал, бородавки и все такое.Это немного «грузоподъемно», так как я в основном ничего не знаю о CVS и немного (пока) о Mercurial:

У меня есть виртуальная машина Windows XP, с которой я могу делать снимки, поэтому я сделал это, а затемустановил CVSNT и версию Mercurial для командной строки Windows (я использую TortoiseHg на моей основной машине).Я сделал это на виртуальной машине, чтобы я мог легко избавиться от CVSNT, Mercurial и всего остального, что мне пришлось создать во время этой одноразовой миграции.Да, мне, вероятно, не нужно было этого делать, но виртуальная машина была уже доступна, и у меня уже было достаточно странных кусков приложений, оставшихся после циклов установки / удаления за эти годы.: -)

Насколько я могу судить, CVSNT была единственной доступной программой, которая могла легко настроить сервер CVS на компьютере с Windows.Кажется, это было бесплатно в свое время, но текущий сайт владельца теперь просит денег.Это не плохо, но я действительно не мог оправдать тратить деньги только на одноразовое обращение.В конце концов я отследил более старую версию CVSNT с помощью поиска Google и установил ее без проблем.

Вот заметки, которые я сделал, изучая, как заставить это преобразование работать:

Длинная версия

Скопируйте нужную папку с исходным кодом с диска основного компьютера на диск виртуальной машины.Скопируйте различные файлы ", v" из структуры папок C: \ RCS в ту же папку с исходным кодом на ВМ.Просто скопируйте, v файлы из соответствующей папки в C: \ RCS.Откройте окно командной строки на ВМ и введите следующее:

path %PATH%;C:\Program Files\cvsnt
mkdir \cvs-repo  [or clean the folder out if it already exists]
cvs -d \cvs-repo init
[A DIR of \cvs-repo should show a CVSROOT folder in there.]

Сделайте копию папки с исходным кодом в \cvs-repo.\cvs-repo теперь должно иметь только две папки: CVSROOT и вашу новую папку.Скопируйте также в соответствующие файлы ", v".

mkdir \cvs-checkout [or clean that folder out if it already exists]
cd \cvs-checkout
cvs -d \cvs-repo co name_of_your_source_code_folder

DIR "\ cvs-checkout \ name_of_your_source_code_folder" должен показать все ваши файлы исходного кода, которые теперь извлечены из CVS.

Если вы еще этого не сделали, загрузите Mercurial с https://www.mercurial -scm.org / и установите его.Откройте копию Блокнота и перетащите в нее файл «C: \ Program Files \ Mercurial \ hgrc.d \ Mercurial.rc».В разделе «[extensions]» удалите точку с запятой в начале строки «;convert =».Сохраните файл в «C: \ Documents and Settings \ имя_пользователя \ Mercurial.ini»

В командной строке виртуальной машины:

path %PATH%;C:\Program Files\Mercurial
mkdir \my-repo.hg  [or clean that folder out if it already exists]
hg convert --datesort \cvs-checkout\source_code_folder_name \my-repo.hg
cd \my-repo.hg
[A DIR of \my-repo.hg should show a new ".hg" folder.]
hg update
[A DIR should now show the ".hg" folder and all the checked-out files.]

Скопируйте папку «.hg» из \ my- Перепишите в папку с исходным кодом на жестком диске вашего главного компьютера.Папка назначения теперь будет отображаться в TortoiseHg со всей соответствующей историей изменений, но все файлы будут помечены как Измененные (значок с восклицательным знаком в красном круге).Это связано с тем, что новый репозиторий Mercurial считает, что файлы были отмечены с окончаниями строк Unix (0x0A) вместо Windows (0x0D, 0x0A).Похоже, это происходит в процессе «hg convert», и я не нашел никакого способа обойти это.

Короткая версия

Как только все настроено в ВМ, вот что нужно сделать:

  • Удалите все в \ cvs-repo, \ cvs-checkout и \ my-repo.hg.
  • В командной строке cvs -d \cvs-repo init.
  • Вернувшись на свою главную машину, скопируйте папку с исходным кодом в общую папку вашей виртуальной машины (именно так вы делаете это в VirtualBox; другое программное обеспечение для виртуальных машин может позволить вам просто перетащить папку в виртуальную машину).
  • Скопируйте соответствующие файлы ", v" в папку с исходным кодом в общей папке виртуальной машины.
  • Вернувшись на виртуальную машину, переместите папку с исходным кодом в \ cvs-repo.
  • cd \cvs-checkout
  • cvs -d \cvs-repo co name_of_your_source_code_folder
  • hg convert --datesort \cvs-checkout\name_of_your_source_code_folder \my-repo.hg
  • cd \my-repo.hg
  • hg update
  • Копироватьпапка .hg из \ my-repo на диск L: на виртуальной машине (буква L - это буква подключенного диска общей папки моей виртуальной машины).
  • Переместить эту папку из папки переноса виртуальной машиныПерейдите в конечную папку с исходным кодом на главном компьютере.

Handy Batch File

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

@echo off
rem Converts source code under RCS control to a Mercurial repository.
rem This batch takes one argument: the name of the source-code folder (in quotes if necessary).
rem
rem This is for a VirtualBox VM that already has CVSNT and Mercurial installed, and has a Shared Folder mapped to drive L.
@echo On the host, copy the source-code folder into the Virtual Machine Transfer folder.  Copy the appropriate ",v" files into the source-code folder in the Virtual Machine Transfer folder.
pause
@echo on
cd \
rmdir /S/Q \cvs-repo
mkdir \cvs-repo 
rmdir /S/Q \cvs-checkout
mkdir \cvs-checkout
rmdir /S/Q \my-repo.hg
mkdir \my-repo.hg
cvs -d \cvs-repo init
xcopy L:\%1 \cvs-repo\%1 /E/I
cd \cvs-checkout
cvs -d \cvs-repo co %1
hg convert --datesort %1 \my-repo.hg
cd \my-repo.hg
hg update
xcopy \my-repo.hg\.hg L:\.hg /E/I

Заключение

Итак, все это работало, но у меня остались файлы с неправильными окончаниями строк.Глядя на этот вопрос , я вижу, что я не единственный с этой проблемой.Я могу жить с этим, но я все еще хотел бы исправить это, если кто-нибудь знает о решении.

0 голосов
/ 16 октября 2010

Если у Mercurial есть поддержка быстрого импорта / быстрого экспорта и если в ваших многофайловых репозиториях нет веток, вы можете попробовать использовать мой инструмент rcs-fast-export (доступно @ http://git.oblomov.eu/rcs-fast-export). Хотя до сих пор я использовал его только для экспорта из RCS в git, я не знаю каких-либо специфических для git команд быстрого экспорта, чтобы они могли работать.

...