陈娟 2010-05-28
本节和大家一起学习一下VSStoSVN代码库迁移方案,和大家分享一下,看完本文你肯定有不少收获,希望本文VSStoSVN代码库迁移内容讲解能教会你更多东西。
最近想把在VisualSourceSafe(VSS)上管理的代码库迁移到Subversion(SVN)中。但是不想丢弃VSS代码库上的历史,并且VSS代码库中有一部分目录和文件是中文的文件名。在经过大量的实验后终于把VSS代码库迁移到SVN了,并且中文目录、中文文件名还有历史版本信息能大部保留下来。在此把迁移心得分享出来,以免少走弯路。
市面上能进行VSStoSVN代码库迁移的工具有VSStoSVN和SVN-Importer,以下对两种工具进行介绍。
一、VSStoSVN
是一个perl语言编写的转移工具,其编译成exe的转移程序基本不支持中文目录和中文文件名。网上很多介绍,还有什么拷贝一个*.dll文件到system32目录下后就可以支持中文目录和中文文件名也是没有可进行性的。但是从理论上说如你您对perl语言比较了解,说不定在一个perl语言下,地VSStoSVN进行初基的改造就可以支持中文目录和中文文件名。但如果您的vss代码库中没有中文目录和中文文件名,这个工具是一个不错的选择。
二、SVN-Importer
本人使用此工具成功的把含有中文目录和中文文件名的vss代码库转换到svn代码库中,并且现在已正常使用,除了部分含中文文件名的*.doc文件没有完全的代码过来(中文文件名中有个别字还是乱码)。以下是使用SVN-Importer的必须条件,只能完全按照以下配置,才有把含有中文目录和中文文件名的VSS代码库迁移到SVN中的可能性。
2.1、必须使用JavaJDK1.4或IBMJAVASDK5.0作为SVN-Importer的Java运行环境。JavaJDK5.0、JavaJDK6.0作为Java运行环境时迁移出来的代码库中的中文基本就是乱码,具体原因没有研究。
2.2、如果Windows是中文版的操作系统,那恭喜你需要修改“控制面板”中的“区域和语言选项”。在vss版本库中,时间格式一般是hh:mm:ss,日期格式一般是MM/dd/yy。所以如果系统时间格式和日期格式与vss的不一致会导致SVN-Importer不工作。
2.3、svn版本库管理工具需要使用svn1.4或svn1.5版本。使用svn1.6时使用svnadminload导入damp文件时异常退出,原因不详。
三、配置SVN-Importer的config.properties
操作模式:SVNImporter有3种操作模式:完整、增量和列表。
(1)、完整模式用于将源VCS的版本库数据全部导出。
(2)、增量模式则用在第一次的完整模式之后,导出新增加的数据。
(3)、列表模式只将要导出的数据显示出来,不实际导出。
操作步骤:
1、修改配置文件
SVN-Importer是通过读取配置文件来决定执行方式的,能否成功的关键就是配置文件是否正确,下面我结合自己的实际过程说一下主要需要注意的配置参数
#Providersettings
srcprovider=vss设置源vcs是什么系统,可以是cvs、cvsrcs、pvcs、vss、cc、mks等,我此处是vss
#Importoptions
import_dump_into_svn=no是否将第三步和前两步连起来,我这里选择no
existing_svnrepos=no当import_dump_into_svn设置为yes时,如果这个选项也设置为yes,那么只有svn的仓库已经存在,数据才能导入到svn的仓库中
clear_svn_parent_dir=no如果这个被设为yes,并且import_dump_into_svn也设为yes,在导入数据之前,程序会删除所有在svn仓库父目录下的东东(只在完整模式下才有用)
use_only_last_revision_content=no如果设为yes,则只导出源VCS的最后一个版本的内容,请看VSStoSVN代码库迁移介绍中的其他内容。
#Fileoptions下面这些文件,都既可以是以相对路径指定的,又可以是以绝对路径指定的
full.dump.file=/data/cvs/full_dump.txt选择full方式dump,这个参数就会起作用,表示dump的结果文件
incr.dump.file=incr_dump.txt增量模式时生成的DUMP文件路径
incr.history.file=incr_history.txt历史文件路径,这个文件在第一次完整模式时生成,以后使用增量模式时需要读取其内容
list.files.to=src_type_file.txt列表模式,这个是指定第一步从源VCS系统取出的内容,还转化成svn的dump文件前的东东
dump.file.sizelimit.mb=0dump文件大小限制,0表示无文件大小限制
#Debugoptions
disable_cleanup=no如果这个设置为yes,则从源VCS系统导出的临时文件不会被删除
#SVNdumpoptions
trunk_path=trunk
branches_path=branches
tags_path=tags
svnimporter_user_name=SvnImporter产生第一个版本的用户
only_trunk=no是否只有trunk,如果选是,则只有trunk文件夹被导出到dump文件,branches和tags目录会被忽略
#SVNoptionssvn环境,只有import_dump_into_svn为yes的时候才起作用
svnadmin.executable=c:/svn/svnadmin.exesvnadmin工具的位置
svnadmin.repository_path=c:/SVN将被导入的目的仓库的路径
svnadmin.parent_dir=.dump出来的文件将被导入的目录,相对于仓库内的路径,.表示仓库的根目录,其他值则为相对于仓库根目录的子目录,该目录将作为导入内容的父目录
svnadmin.tempdir=c:/temp/local临时目录
svnclient.executable=c:/svn/svn.exesvn客户端工具的位置
svnadmin.verbose_exec=no如果设置为yes,则所有执行的svnadmin命令将被显示到终端。VSStoSVN代码库迁移介绍中SVNoptionssvn环境讲解完毕,下面看一下vssoptions。