Вопрос

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

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

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

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

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

Решение

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

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

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

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

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

Скопируйте папку Source-Code, вам нужно от привода главного компьютера к диску VM. Скопируйте различные файлы «V» из структуры папки C: RCS к той же папке исходного кода на VM. Просто скопируйте файлы V, V из соответствующей папки в C: RCS. Откройте окно командной строки в VM и введите следующее:

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». Под [расширением], удалите точку с запятой в начале линии ";convert =«. Сохранить файл на« C: документы и настройки user_name mercurial.ini »

Назад на командной строке VM:

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-refo в папку исходного кода на жестком диске основного компьютера. Папка назначения теперь появится в TortoiseHG со всеми соответствующими историями изменения, но все файлы, помеченные как измененные (значок наложения восклицательного знака в красном круге). Это связано с тем, что новый репозиторий Mercurial считает, что файлы были проверены с концовками Line Unix (0x0a) вместо Windows (0x0d, 0x0a). Это, кажется, происходит в процессе «HG Convert», и я не нашел никакого пути вокруг него.

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

Как только все настроено в VM, вот что делать:

  • Удалить все в CVS-Reppo, CVS-оформление и my-repo.hg.
  • В командной строке, cvs -d \cvs-repo init.
  • Вернуться на вашу главную машину, скопируйте папку исходного кода в общую папку вашей виртуальной машины (вот как вы это делаете в VirtualBox; другое программное обеспечение VM может позволить вам просто перетащить папку в VM).
  • Скопируйте соответствующие файлы «V» в папку исходного кода в общую папку Virtual Machine.
  • Вернуться в VM, переместите папку исходного кода на 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: Drive на VM (L - это сопоставленная буква привода My VM-совместной папки VM).
  • Переместите эту папку из папки передачи виртуальной машины до окончательной папки исходного кода на хост-компьютере.

Удобный пакетный файл

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

@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

Заключение

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

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

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

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