我一直在使用compontentsoftware的 CS-RCS Basic 多年来,管理我的各种单人开发项目。它对我来说很好,但是现在我想迁移到现代的修订控制系统,在研究了我的选择之后,我决定使用Mercurial。

问题在于,我一直使用CS-RCS的中央存储库,现在我想将单个Mercurial存储库用于单个项目,并保留RCS存储库的历史记录。

经过深入的谷歌搜索后,我得出的结论是,这样做的唯一方法是将我的RCS存储库转换为单个CVS存储库,然后将其转换为Mercurial。这两个站点可能是最有帮助的:

为了与杰夫·阿特伍德(Jeff Atwood)提出和回答我自己的问题的想法,我将为其他任何人遇到的人回答这个问题,以防万一我稍后再找到它。如您所见,尽管我确实找到了解决方案,但它很笨拙,至少有一个重要的问题。如果其他人有任何更好的方法,我肯定想听听它。

有帮助吗?

解决方案

这是我想出的方法,疣和所有方法。这有点“货物崇拜”,因为我基本上对CVS一无所知,而(尚未)对Mercurial却不了解:

我有一台可以拍摄快照的Windows XP虚拟机,因此我做到了,然后安装了CVSNT和Windows命令行版本的Mercurial(我在主机上使用Tortoisehg)。我在VM中做到了这一点,因此我可以轻松地摆脱CVSNT,Mercurial以及在一次一次迁移时必须创建的其他任何事情。是的,我可能不必这样做,但是VM已经可用,多年来,我已经有足够的奇数应用程序/卸载周期剩下的。 :-)

据我所知,CVSNT是唯一可以轻松在Windows计算机上设置CVS服务器的程序。看来这是一次免费的 当前网站 现在要钱。那不是一件坏事,但是我真的无法证明花钱仅仅是为了进行一次转换。最终,我确实通过Google搜索跟踪了旧版本的CVSNT,并没有问题进行安装。

这是我在学习如何使这种转换起作用时所记录的笔记:

长版

将所需的源代码文件夹从主计算机的驱动器复制到VM驱动器。将各种“,V”文件从C: RCS文件夹结构复制到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中签出。

如果您还没有这样做,请从中下载Mercurial https://www.mercurial-scm.org/ 并安装它。打开记事本的副本,然后将文件“ C: Program Files Mercurial Hgrc.d Mercurial.rc”拖到其中。在“ [扩展]”下,在线开始时卸下半隆”;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转换”过程中发生的,我还没有找到任何解决方法。

简短版本

一旦在VM中设置了所有内容,这就是该怎么做:

  • 删除 cvs-repo, cvs-Checkout和 my-repo.hg中的所有内容。
  • 在命令行, cvs -d \cvs-repo init.
  • 返回主机,将源代码文件夹复制到虚拟机的共享文件夹中(这就是您在VirtualBox中进行操作;其他VM软件可能会让您只需将文件夹拖放到VM中)即可。
  • 将适当的“,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

结论

因此,这一切都起作用了,但是给我留下了错误的线路结尾的文件。看着 这个问题, ,我看到我不是唯一有这个问题的人。我可以忍受这个,但是如果有人知道解决方案,我仍然想解决它。

其他提示

如果Mercurial具有快速IMPORT/FAST-EXPORT支持,并且如果您的多文件存储库不使用分支,则可以尝试使用我的RCS-Fast-Export工具(可用 @ http://git.oblomov.eu/rcs-fast-export )。尽管我只用它从RCS导出到git,但我不知道使用的任何特定于GIT的快速出口命令正在使用,因此它可能起作用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top