这是我想出的方法,疣和所有。这有点“货物崇拜”,因为我对 CVS 基本上一无所知,对 Mercurial 也知之甚少:
我有一个可以拍摄快照的 Windows XP 虚拟机,所以我这样做了,然后安装了 CVSNT 和 Mercurial 的 Windows 命令行版本(我在我的主机上使用 TortoiseHg)。我在 VM 中执行此操作,因此可以轻松摆脱 CVSNT、Mercurial 以及在执行此一次性迁移时必须创建的任何其他内容。是的,我可能不必这样做,但虚拟机已经可用,而且多年来我已经从安装/卸载周期中得到了足够多的应用程序。:-)
据我所知,CVSNT 是唯一可以在 Windows 机器上轻松设置 CVS 服务器的可用程序。似乎这曾经是免费的,但所有者当前的网站现在要钱。这不是一件坏事,但我真的无法证明花钱只是为了进行一次性转换。我最终通过谷歌搜索找到了一个旧版本的 CVSNT 并安装它没有问题。
以下是我在学习如何进行此转换时所做的笔记:
长版
将所需的源代码文件夹从主计算机的驱动器复制到 VM 的驱动器。将 C:\RCS 文件夹结构中的各种“,v”文件复制到 VM 上的同一源代码文件夹。只需从 C:\RCS 的相应文件夹中复制 ,v 文件即可。在 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
"\cvs-checkout\name_of_your_source_code_folder" 的 DIR 应该显示所有源代码文件,这些文件现在已从 CVS 中签出。
如果您还没有这样做,请从https://www.mercurial-scm.org/下载 Mercurial并安装它。打开记事本的副本并将文件“C:\Program Files\Mercurial\hgrc.d\Mercurial.rc”拖入其中。在“[extensions]”下,删除“”行开头的分号;convert =
。将文件保存到“C:\Documents and Settings\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-repo 复制到主计算机硬盘驱动器上的源代码文件夹。目标文件夹现在将显示在 TortoiseHg 中,其中包含所有适当的更改历史记录,但所有文件都标记为已更改(红色圆圈中的感叹号图标覆盖)。这是因为新的 Mercurial 存储库认为文件是以 Unix 行结尾 (0x0A) 而不是 Windows (0x0D,0x0A) 签入的。这似乎发生在“hg convert”过程中,我还没有找到任何解决方法。
短版
在 VM 中设置好所有内容后,执行以下操作:
- 删除 \cvs-repo、\cvs-checkout 和 \my-repo.hg 中的所有内容。
- 在命令行中,
cvs -d \cvs-repo init
.
- 回到您的主机上,将源代码文件夹复制到您的虚拟机的共享文件夹中(这就是您在 VirtualBox 中的操作方式;其他虚拟机软件可能会让您只需将文件夹拖放到虚拟机中)。
- 将相应的 ",v" 文件复制到虚拟机共享文件夹中的源代码文件夹中。
- 返回 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 复制到 VM 上的 L: 驱动器(L 是我的 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
结论
所以,这一切都奏效了,但给我留下了行尾错误的文件。看着这个问题,我发现我不是唯一一个有这个问题的人。我可以忍受这个,但如果有人知道解决方案,我仍然想修复它。