首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CS-RCS迁移到Mercurial

从CS-RCS迁移到Mercurial
EN

Stack Overflow用户
提问于 2010-08-20 22:55:49
回答 2查看 739关注 0票数 3

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

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

在深入谷歌搜索之后,我得出结论认为,唯一的方法是将我的RCS存储库转换为单独的CVS存储库,然后将这些存储库转换为Mercurial库。这两个站点可能是最有用的:

为了符合杰夫·阿特伍德提出的提问和回答我自己的问题的想法,我将为陷入这种情况的其他人回答这个问题,以防我以后不得不再次找到它。正如您将看到的,虽然我找到了一个解决方案,但它很笨重,并且至少有一个重要的问题。如果其他人有更好的方法,我当然想听听。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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上打开命令提示符框并键入以下内容:

代码语言:javascript
复制
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“文件以及。

代码语言:javascript
复制
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命令行:

代码语言:javascript
复制
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-签出和\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上设置了这个批处理文件,以便尽可能地自动化这个过程:

代码语言:javascript
复制
@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

结论

所以,这一切都有效,但留给我的文件,有错误的行结尾。看看这个问题,我知道我不是唯一一个有这个问题的人。我可以接受这个问题,但如果有人知道解决方案,我还是想解决这个问题。

票数 1
EN

Stack Overflow用户

发布于 2010-10-16 09:20:38

如果Mercurial具有快速导入/快速导出支持,如果您的多文件存储库不使用分支,则可以尝试使用我的rcs-快速导出工具(Available@ http://git.oblomov.eu/rcs-fast-export )。虽然到目前为止,我只使用它从RCS导出到git,但是我不知道使用任何特定于git的快速导出命令,这样它就可以工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3535412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档