`
wing.wang
  • 浏览: 25264 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

CVS迁移到SVN解决方案之svn-importor

阅读更多
    最近有一个case,就是要将代码库从原先的cvs服务器,迁移到svn服务器。
原先使用过cvs2svn,但需要安装Python的支持,感觉不那么方便。 发现原来还有另一个强大的工具,就是 SVN Importer。

    SVN Importer不但支持cvs to svn, 而且还支持cvsrcs、pvcs、vss、cc、mks等转移到svn服务器。 此外, SVN Import是纯java编写的小软件,只要你机子上有jdk, 那就可以直接使用了。

    SVN Importer有两种方案来迁移CVS的版本库。
    1. 使用SVN Importer内置的Java CVS通过pserver协议来导出数据;
    2. 使用RCS直接从CVS版本库文件系统中导出数据。
    数据迁移过程分三步。和其它工具类似,都是读数据、生成DUMP、导入DUMP。整个过程及参数配置都在文档里写得比较详细。
    SVN Importer的安装和运行很简单。下载之后解压到某个目录即完成安装。安装目录下有一个run.bat文件。运行run.bat的时候要带2-3个参数。第一个参数是操作模式;第二个参数是配置文件;第三个参数指定一个日期,表示仅迁移这个日期之后的数据。
    SVN Importer有3种操作模式:完整、增量和列表。完整模式用于将源VCS的版本库数据全部导出;增量模式则用在第一次的完整模式之后,导出新增加的数据;列表模式只将要导出的数据显示出来,不实际导出。
    至于配置文件,在安装目录下已经有一个config.properties作为示例。使用SVN Importer的时候只需要复制一份这个文件,再稍做修改即可。
    配置文件中主要分四个部分:
    第一部分,常规配置,这里选择源版本库,设置临时目录,以及中间文件的位置等。重要的一些设置如下:
    srcprovider=源VCS,可以是cvs、cvsrcs、pvcs、vss、cc、mks等
    import_dump_into_svn=yes或no,是否在生成DUMP文件之后立即导入SVN中(选否则不导入)
    full.dump.file=完整模式时生成的DUMP文件路径
    incr.dump.file=增量模式时生成的DUMP文件路径
    incr.history.file=历史文件路径,这个文件在第一次完整模式时生成,以后使用增量模式时需要读取其内容。
    第二部分是SVN相关的设置,主要包括svnadmin的位置和版本库中的一些设置。关键设置如下:
    trunk_path=/trunk,主分支所在目录
    branches_path=/branches,分支目录
    tags_path=/tags,标签保存目录
    svnimporter_user_name=SvnImporter,创建版本库的用户名
    svnadmin.executable=svnadmin的路径
    svnadmin.repository_path=产生的SVN版本库路径
    svnadmin.parent_dir=将数据导入版本库里的哪们目录。想设置为根目录,将这个值设置为.(点号)即可;或者可以设置成工程名。    trunk、branches和tags都会产生在这个目录之下。
    第三部分是对所选择的源VCS进行配置,用于导出数据。因为工作中只是为了迁移CVS的数据,所以只用到了导出CVS的两种配置。稍后说明。
    第四部分是对日志文件的一些配置。
   
    第一次是直接使用的srcprovider=cvs,通过pserver来导出数据。想对于cvsrcs来说,这个速度要稍慢一些,但是它不需要安装第三方的工具,只需要使用内置的Java CVS就行,所以用来导出小项目还是比较好的。而且配置也比较简单,主要就是CVSROOT中的一些配置。
    cvs.class=org.polarion.svnimporter.cvsprovider.CvsProvider
    cvs.username=访问CVS版本库的用户名
    cvs.password=上面用户名登录CVS版本库时的密码
    cvs.hostname=主机地址
    cvs.repository=CVSROOT目录
    cvs.modulename=要导出的工程(或目录)
    cvs.tempdir=存放临时文件的目录
    后来考虑到CVS里面的工程都比较大,而且可能需要直接从版本库文件导出数据(不是通过客户端去访问CVS版本库,而直接访问版库的文件),所以又尝试了使用srcprovider=cvsrcs。这个情况下要用GNU RCS来导出CVS数据,所以需要安装RCS(http://www.gnu.org/software/rcs/rcs.html)。
    RCS目前最新是5.7版,分3个包下载,分别是rcs57pc1、rcs57pc2和rcs57pc3。这3个文件包分别是编译好的二进制文件、文档和源码。其实只需要下载第一个包就行了,需要用到的也只是bin目录下的rlog和co两个命令而已。相关配置大概有:
    cvsrcs.class=org.polarion.svnimporter.cvsprovider.CvsRcsProvider
    cvsrcs.repository_path=CVS版库文件目录
    cvsrcs.rlog_command=rlog命令的路径
    cvsrcs.co_command=co命令的路径
    cvsrcs.tempdir=保存临时文件的目录
    配置好之后,一开始每次运行都失败,看日志也不知所云。大概是说某个文件没找到。于是决定手工运行rlog.exe来试试看。
    rlog.exe cvsroot\common\common.sln,v
    结果报错
    rlog: cvsroot\common\RCS/common.sln,v: No such file or directory
    很奇怪,为什么rlog非要塞一个RCS/目录进去呢?后来在论坛上查到,使用cvsrcs的时候,需要设置环境变量RCSINIT=-x,v/,虽然看不明白是啥意思,不过设置了这个环境变量之后SVN Importer跑成功了。
    为了搞明白这个设置,所以只好去下载了RCS的文档来查看。在文档里搜索-x,v/,发现原来是配置RCS处理的文件后缀。未设置的情况下会去RCS子目录中查找文件。-x是设置后缀的参数,v是CVS版本库文件的后缀,而/是分隔符,其后没有东西表示为空。所以这个设置是兼顾,v文件和RCS/两种情况。
    最后,由于CVS不能记录目录的更改历史,最后导入到SVN后,从HEAD里取出来的数据中有许多原来删除掉的目录和文件。感觉多冒出来的那些都应该是些空目录才对,搞不明白为什么还有一些删除掉的文件也冒出来了,还不太好找规律。所以,只好先对照从CVS里Checkout出来的最新版,删除掉多余的目录和文件之后,再Checkin到SVN中,这才算完成迁移过程。
分享到:
评论

相关推荐

    从CVS迁移至SVN的两种方法

    cvs2svn --cvs-root=cvsroot --svn-repository=svnroot --log-file=migration.log ``` 5. **解决冲突和修复**:迁移过程中可能出现问题,需要根据日志文件`migration.log`进行调试和修复。 6. **导入到SVN**:...

    将cvs转换为svn库的工具cvs2svn

    cvs2svn --cvs-root=<CVS根目录> --svn-url=<SVN仓库URL> --config-file=<配置文件> <输出目录> ``` 3. **导入到SVN**:使用SVN客户端(如TortoiseSVN),将生成的SVN格式数据导入到新的SVN仓库中。 **四、注意...

    CVS迁移SVN工具亲测可用

    这个过程可以通过特定的工具来实现,如cvs2svn,这是一个强大的CVS到SVN的数据迁移工具。 **cvs2svn-2.5.0.tar.gz** `cvs2svn` 是一个开源的工具,专门设计用于将CVS仓库转换为SVN仓库。它能够处理复杂的CVS历史...

    CVS团队升级SVN团队的解决方案

    本文档旨在提供一份详尽的解决方案书,指导CVS项目团队顺利迁移到SVN,包括前期研究、产品对比、优势分析以及具体的实施步骤。 #### 二、CVS团队如何升级SVN ##### 2.1 预研阶段 预研阶段的主要任务是评估现有的...

    CVS 2 SVN 指导

    ### CVS到SVN迁移指南:理解与实践 在软件开发领域,版本控制系统是不可或缺的工具,帮助团队管理和追踪代码的变化。随着技术的发展,Subversion(SVN)因其强大的功能和性能逐渐取代了早期的Concurrent Versions ...

    cvs2svn-2.4.0.tar.gz

    cvs2svn is a program that can be used to migrate a CVS repository to Subversion (otherwise known as "SVN") or git. Documentation: The list of cvs2svn features explains briefly why converting a ...

    我的cvs2svn笔记

    2. **cvs2svn工具**:这是一个转换工具,能够将CVS仓库的数据迁移到SVN仓库。它支持多种CVS的存储格式,并可以处理复杂的分支历史,保持原有的版本信息。 3. **Windows环境下的配置**:在Windows系统中使用cvs2svn...

    将CVS库转换为SVN库

    随着版本控制系统的发展与演进,从较早的集中式版本控制系统(如CVS)到更先进的Subversion(SVN),开发者们经常面临将现有CVS仓库迁移到SVN的需求。本文将详细介绍如何在Windows环境下完成这一过程,并给出具体的...

    CVS和SVN配置学习

    SVN(Subversion)是在CVS的基础上发展起来的,旨在解决CVS的一些问题,如性能、安全性和稳定性。SVN同样采用客户端-服务器模型,但提供了更先进的分支管理和冲突处理机制。它还支持原子提交,保证了数据的一致性。...

    TortoiseSVN-1.14.1.29085-x64-svn-1.14.1.zip

    1.安装客户端 2.安装语言包 3.设置语言中文简体(不知道怎么设?度娘) ...互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

    TortoiseSVN-1.14.6.29673-x64-svn-1.14.3

    1.安装客户端 2.安装语言包 3.设置语言中文简体(不知道怎么设?度娘) ...互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

    将CVS库转换为SVN库用到的文件python-2.4.msi

    将CVS库转换为SVN库用到的文件python-2.4.msi

    CVS与SVN区别

    CVS(Concurrent Versions System)和SVN(Subversion)都是源代码版本控制系统,用于管理和跟踪文件及目录的变更。它们都属于SCM(Software Configuration Management)工具,但两者之间存在显著的区别。 1. **...

    cvs2svn-2.3.0.tar.gz

    作用:将CVS库转为SVN库,是SVN比较好的一个插件 ...绝对超值:适用从cvs导出数据到svn,消除了中文乱码问题 使用简单:解压后即可使用 注:当时使用的时候费了好大的劲,才整了份全的。现在和大家分享

    VS2022 SVN 扩展插件 Ankh-VSIX-2022

    2. **解决方案级别的SVN操作**:可以在整个解决方案或特定项目上执行SVN操作。 3. **源代码差异对比**:内置的差异查看器可以帮助开发者直观地比较文件的不同版本。 4. **冲突解决工具**:提供图形化的冲突解决...

    代码管理工具SVN-CC-GIT-VSS-CVS详细使用说明书最终版

    ### 代码管理工具SVN-CC-GIT-VSS-CVS详细使用说明书 #### 1. 简介 本文档旨在提供对几种常用的代码管理工具的深入理解和使用指南,包括Subversion (SVN)、ClearCase (CC)、Git、Visual SourceSafe (VSS) 和 ...

    CVS SVN VSS 对比 说明

    再者,SVN的命令行界面和操作方式与CVS相似,降低了学习成本,方便了从CVS迁移的用户。 VSS相比于CVS和SVN,其主要缺点在于对并发编辑的支持不够完善,以及在处理大文件和非文本数据时的不稳定表现。此外,VSS的...

    svn与cvs对比

    ### SVN与CVS对比分析 在软件开发领域,版本控制系统(Version Control System,VCS)是不可或缺的工具,它帮助开发者们追踪代码的变更历史,协同工作,以及管理项目的复杂性。Subversion(简称SVN)和Concurrent ...

    利用cvs2svn和svn-importer 将vcs项目转成svn

    NULL 博文链接:https://taotao6086.iteye.com/blog/282262

Global site tag (gtag.js) - Google Analytics