Subversion安装配置维护,尽在我用Subversion - 我用Subversion编辑团队倾力打造
注意:本文档中心已转移至SVN知识库
注册 | 登陆 RSS 2.0 订阅


使用svnimporter将CVS转为SVN

« 上一篇 | 下一篇 »

作者:扬州鹤

来自:iUseSVN.com

环境:
操作系统               Linux RH AS 4
cvs                       1.11.22
repository位置       /data/cvs/cvsrepo

目标:将仓库cvsrepo导入到本机的svn仓库/data/svnrepos/test

采用工具:svn-importer-1.1-M8

操作策略:由于svn-importer采用的导出方式类似于数据仓库中的ETL
即抽取转化装载过程,总体思路分三步走。

抽取的过程是采用jar包封装的cvsclient,协议使用pserver,这样就保证了得到的源数据是准确的
不同于某些直接读取cvs仓库格式的工具,使得抽取过程可以扩展到其他版本控制工具,
事实上svn-importer也已经扩展了N多其他常见的版本控制工具

转换的过程是怎样的,我并不清楚,只知道转换后的结果是一个标准输出的字节流,
如果将这个字节流存储为文件的形式,那个这个文件的格式和我们使用svnadmin dump 得到的文件格式是相同的。
事实上,抽取和转换的过程在我们看来是不可分割的。

装载过程其实就是svnadmin load,源是上文说的字节流,也可以是相应的dump文件
目的地就是svn仓库。
装载过程是可以和前两步分开的,也可以合在一起执行。

我采取的策略就是分开执行,先得到dump文件,然后自己手工执行svnadmin load

 

操作模式: SVN Importer有3种操作模式:完整、增量和列表。

完整模式用于将源VCS的版本库数据全部导出;

增量模式则用在第一次的完整模式之后,导出新增加的数据;

列表模式只将要导出的数据显示出来,不实际导出。

操作步骤:
1  修改配置文件
    svn-importer是通过读取配置文件来决定执行方式的,能否成功的关键就是配置文件是否正确
    下面我结合自己的实际过程说一下主要需要注意的配置参数

   

# Provider settings                           
srcprovider=cvs                                        设置源vcs是什么系统,可以是cvs、cvsrcs、pvcs、vss、cc、mks等,我此处是cvs


# Import options
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的最后一个版本的内容

# File options                                           下面这些文件,都既可以是以相对路径指定的,又可以是以绝对路径指定的
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=0                             dump文件大小限制,0表示无文件大小限制

 

# Debug options                                                                   
disable_cleanup=no                                   如果这个设置为yes,则从源VCS系统导出的临时文件不会被删除

 

# SVN dump options
trunk_path=trunk
branches_path=branches
tags_path=tags
svnimporter_user_name=SvnImporter           产生第一个版本的用户
only_trunk=no                                           是否只有trunk,如果选是,则只有trunk文件夹被导出到dump文件,branches和tags目录

                                                               会被忽略

# SVN options                                           svn环境,只有import_dump_into_svn为yes的时候才起作用
svnadmin.executable=c:/svn/svnadmin.exe    svnadmin工具的位置
svnadmin.repository_path=c:/SVN                将被导入的目的仓库的路径
svnadmin.parent_dir=.                                dump出来的文件将被导入的目录,相对于仓库内的路径,.表示仓库的根目录,其他值则为

                                                               相对于仓库根目录的子目录,该目录将作为导入内容的父目录
svnadmin.tempdir=c:/temp/local                   临时目录
svnclient.executable=c:/svn/svn.exe             svn客户端工具的位置
svnadmin.verbose_exec=no                         如果设置为yes,则所有执行的svnadmin命令将被显示到终端

# CVS options               源版本控制系统的参数,必须设置正确,否则将报错,除了第一项和最后一项都要好好设置

                                   username,password不用多说,此处注意需要一个对欲导出仓库有写权限的用户,只读是不行的

                                   导出过程中需要对文件lock

                                   仔细设置你的cvs.username=,cvs.password=,cvs.hostname=,cvs.repository=

                                   确保下面的命令能够执行,实际输入参数的时候不要带引号,则这四个参数设置就没有大问题

                                   cvs -d :pserver:'cvs.username':'cvs.password'@'cvs.hostname':'cvs.repository' login                                 
cvs.class=org.polarion.svnimporter.cvsprovider.CvsProvider
cvs.username=user

cvs.password=pass

cvs.hostname=localhost
cvs.repository=/data/cvs/cvsrepo                                           cvs仓库位置,一般和CVSROOT环境变量的值相同,但也不完全如此

cvs.modulename= project_name                                           要导出的工程(或目录),*表示全部

cvs.tempdir=/tmp/cvs                                                          临时文件夹

# Log options                                               日志记录,一般无需修改
log4j.rootLogger=DEBUG, stdout
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=svnimporter.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{HH:mm:ss,SSS} [%t] %5p %c{1}:%L - %m%n

log4j.appender.historyFile=org.apache.log4j.FileAppender
log4j.appender.historyFile.File=history.log
log4j.appender.historyFile.layout=org.apache.log4j.PatternLayout
log4j.appender.historyFile.layout.ConversionPattern=%m%n

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%c{1}:%L %5p - %m%n

                                                 
这些都可以结合自己的实际情况进行修改配置

 

2,执行命令

     方式有两种

     一是直接在终端输入命令行,参数可以是没有,一个两个或三个

     java -jar svnimporter.jar arg1 arg2 arg3

     当没有参数时,将显示usage

     第一个参数必须是如下几个之一,full,incremental,list;help,version

     使用help和veriosn时,只要一个参数就可以了

     使用其他三个时,必须使用第二个参数,第二个参数指定配置文件的路径

     第三个参数是可选参数,为最后一个版本的时间,如果指定了,则要导出该时间之前的版本

     格式为YYYY-MM-DD'T'hh:mm:ss

        YYYY - year
        MM - month
        DD - day in month
        hh - hour (1-24)
        mm - minutes
        ss - seconds

      

      第二种方式是,如果是windows系统,可以直接执行run.bat arg1 arg2 arg3

       linux 系统可以自己编写run.sh

       内容为

       java -jar svnimporter.jar $1 $2 $3

       然后chmod 755 run.sh

       ./run.sh arg1 arg2 arg3

 

3,svnadmin load SVNREPO_PATH <full_dump.txt

     将dump得到的文件load进svn仓库

对于仓库中中文路径和文件名未做测试

检验,收工。

转帖请包含作者等版权信息、并注明来自:我用Subversion - 使用svnimporter将CVS转为SVN


Tags: cvs, svnimporter, svn 编辑: 扬州鹤

« 上一篇 | 下一篇 »

1条记录访客评论

排版真乱

Post by 扬州鹤 on 2007, August 22, 11:45 PM 引用此文发表评论 #1


发表评论

评论内容 (必填):