多年来,我一直在使用ComponentSoftware的CS-RCS Basic来管理我的各种单一开发项目。这对我来说很好,但是现在我想迁移到一个现代的修订-控制系统,在研究了我的选择之后,我决定了变化无常。
问题是,我一直使用一个用于CS-RCS的中央存储库,现在我希望为单个项目使用单独的Mercurial存储库,将历史记录保存在我的RCS存储库中。
在深入谷歌搜索之后,我得出结论认为,唯一的方法是将我的RCS存储库转换为单独的CVS存储库,然后将这些存储库转换为Mercurial库。这两个站点可能是最有用的:
为了符合杰夫·阿特伍德提出的提问和回答我自己的问题的想法,我将为陷入这种情况的其他人回答这个问题,以防我以后不得不再次找到它。正如您将看到的,虽然我找到了一个解决方案,但它很笨重,并且至少有一个重要的问题。如果其他人有更好的方法,我当然想听听。
发布于 2010-08-20 23:43:12
这是我想出的方法,疣等等。这有点“货真价实”,因为我对CVS基本一无所知,对汞的了解也不多:
我有一个Windows虚拟机,可以拍摄快照,所以我这样做了,然后安装了CVSNT和Windows命令行版本的Mercurial (我在我的主计算机上使用TortoiseHg )。我是在VM中这样做的,这样我就可以轻松地摆脱CVSNT、Mercurial以及在进行一次性迁移时必须创建的任何其他东西。是的,我可能不需要这么做,但是VM已经可用了,而且我已经有了很多在安装/卸载过程中遗留下来的奇怪的应用程序。:-)
据我所知,CVSNT是唯一可以轻松在Windows机器上设置CVS服务器的程序。这似乎是免费的,但业主的当前场址现在要求钱。这不是件坏事,但我真的不能仅仅为了一次转换而花钱。我最终找到了一个更旧版本的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中签出的。
如果您还没有这样做,请从https://www.mercurial-scm.org/下载Mercurial并安装它。打开记事本的副本,并将文件"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 -d \cvs-repo init。cd \cvs-checkoutcvs -d \cvs-repo co name_of_your_source_code_folderhg convert --datesort \cvs-checkout\name_of_your_source_code_folder \my-repo.hgcd \my-repo.hghg update方便批处理文件
工作完成后,我在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结论
所以,这一切都有效,但留给我的文件,有错误的行结尾。看看这个问题,我知道我不是唯一一个有这个问题的人。我可以接受这个问题,但如果有人知道解决方案,我还是想解决这个问题。
发布于 2010-10-16 09:20:38
如果Mercurial具有快速导入/快速导出支持,如果您的多文件存储库不使用分支,则可以尝试使用我的rcs-快速导出工具(Available@ http://git.oblomov.eu/rcs-fast-export )。虽然到目前为止,我只使用它从RCS导出到git,但是我不知道使用任何特定于git的快速导出命令,这样它就可以工作了。
https://stackoverflow.com/questions/3535412
复制相似问题