gpt4 book ai didi

version-control - 从CS-RCS迁移到Mercurial

转载 作者:行者123 更新时间:2023-12-01 00:26:41 30 4
gpt4 key购买 nike

多年来,我一直在使用ComponentSoftware的CS-RCS Basic来管理我的各种单一开发人员项目。它对我来说非常有效,但是现在我想迁移到现代的版本控制系统,在研究了我的选择之后,我决定使用Mercurial。

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

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


Converting a directory from RCS to Mercurial
Convert Extension for Mercurial


为了与Jeff Atwood提出并回答我自己的问题的想法保持一致,我将为陷入这种情况的任何其他人回答这个问题,以防万一我以后不得不再次找到它。如您所见,尽管我确实找到了解决方案,但它笨拙并且至少存在一个重大问题。如果有人有更好的方法,我当然想听听。

最佳答案

这是我想出的方法,包括疣和所有。这有点“货运习惯”,因为我基本上对CVS一无所知,而对Mercurial则还不甚了解:

我有一个可以拍摄快照的Windows XP虚拟机,所以我做了快照,然后安装了CVSNT和Windows命令行版本的Mercurial(我在主机上使用TortoiseHg)。我在VM中进行了此操作,因此可以轻松摆脱CVSNT,Mercurial以及我在进行一次迁移时必须创建的其他任何内容。是的,我可能不必执行此操作,但是虚拟机已经可用,并且多年来我已经从安装/卸载周期中遗留了足够多的应用程序。 :-)

据我所知,CVSNT是唯一可以在Windows机器上轻松设置CVS服务器的程序。似乎这是一次免费的,但所有者的current site现在要钱。这不是一件坏事,但是我真的不能证明花钱做一次转换是合理的。最终,我确实通过Google搜索找到了较旧版本的CVSNT,并安装了该版本而没有问题。

以下是我在学习如何进行转换时所采取的注意事项:

长版

将所需的源代码文件夹从主机驱动器复制到VM的驱动器。将各种“,v”文件从C:\ RCS文件夹结构复制到VM上的同一源代码文件夹。只需从C:\ RCS中的相应文件夹中复制.v文件即可。
在虚拟机上打开命令提示符框,然后键入以下内容:

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中检出。

如果尚未这样做,请从 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.]


将\ my-repo中的“ .hg”文件夹复制到主计算机硬盘驱动器上的源代码文件夹中。现在,目标文件夹将以所有合适的更改历史记录显示在TortoiseHg中,但所有文件都标记为已更改(红色圆圈中带有感叹号的图标覆盖)。这是因为新的Mercurial存储库认为文件是使用Unix行尾(0x0A)而不是Windows(0x0D,0x0A)签入的。这似乎是在“汞转换”过程中发生的,但我还没有找到解决方法。

短版

在VM中设置完所有内容后,请执行以下操作:


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


结论

因此,这一切都有效,但是留下了行尾错误的文件。看着 this question,我不是唯一一个遇到此问题的人。我可以接受,但是如果有人知道解决方案,我仍然想修复它。

关于version-control - 从CS-RCS迁移到Mercurial,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3535412/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com