`
lydawen
  • 浏览: 463573 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

CVS迁移到SVN

阅读更多

  去年刚入职现所在公司时,做过一个CVS->SVN迁移,SVN库大概1.8G左右,花了不少时间处理。由于急着迁移并未做好笔记,导致这次迁移另外一个1.5G的项目有点束手无策,好歹之前有经验也有教训,特做下笔记。

 

环境说明:

CVS在一台linux服务器上,SVN在另外一台linux服务器上,项目大概1.5G左右(多年项目,积累了较多tag及文档)。

辅助环境:XP,Ubuntu

需要工具:python,cvs2svn (python支撑cvs2svn运行,一般发行版linux都已经包含python)

 

步骤:

1、先通知参与项目人员,将必要的代码提交,因为自迁移工作开始,CVS的使命也基本完成了,如果漏了一些最新本地副本的提交将人为导致迁移出现一些问题。

 

2、为加快迁移速度,多年沉积下来的版本控制里,像release备份,一些图片等文档,没必要迁移历史,确定哪些不必要迁移(后续人工处理)。这一步将项目所在的CVS库目录tar打包,不需要进行压缩(文件过多,压缩花的时间得偿失)。打包的目的是方便取到本地,清除一些不必要迁移的数据,暂时移除一些不需要迁移历史的数据。

 

3、将tar取到本地并处理好后,就需要将它放到linux(windows下也能完成,但个人更喜欢在linux操作)。从windows下将tar放到linux上,并解压缩,有可能会有中文文件乱码情况,这里的解决方法有几种:1)使用rar包。2)修改linux系统上的字符编码为gbk/gb2312,如果在linux上看到的中文目录或文件名正常了,那就可以进行接下来的操作了。

 

4、也是最重要的一步,将CVS库导出成SVN DUMP文件。

4.1、为保证迁移到SVN的中文目录及中文文件名都正常,可以从解压的CVS文件夹里,复制一个包含中文目录及中文文件名的目录出来,并在它下面建立一个名为CVSROOT的目录,然后使用cvs2svn导出成SVN DUMP文件。假设这个测试的CVS目录名为/home/cvst/test,它下面包含中文目录及文件名,那在test下建立CVSROOT空目录,运行命令:

sudo /usr/mysoft/Python/python cvs2svn --dumpfile=/home/littlechang/testChs.dump /home/cvst/test --encoding=gb2312

这里是假设dump文件放在/home/littlechang 下,正常情况控制台会出现日志,注意看日志中第一个处理步骤pass1 中处理到中文文件名及目录是否正常,如果不正常,请在命令的最后再加上 --encoding=utf-8 即两个encoding参数,继续进行测试,如果不行再换编码直到成功。 4.1输出的日志样例见本文尾。

 

4.2、完成中文测试通过后,得到了testChs.dump文件,这时为安全起见,将它加载到svn中去。假设新svn库在/home/svn/myProject(命令:svnadmin create /home/svn/myProject)下,注意这个版本库里不要包含trunk,branchs,tags 三个目录,如有请清除(例如可在tortoisesvn中将其删除)。

使用命令:svnadmin load /home/svn/myProject</home/littlechang/testChs.dump

 

运行后,会提示开始处理,如不出现异常信息则表示成功。

 

4.2输出的日志样例见本文尾。

 

 

4.1输出日志样例:

Time for pass1 (CollectRevsPass): 267.4 seconds.
----- pass 2 (CleanMetadataPass) -----
Converting metadata to UTF8...
Done
Time for pass2 (CleanMetadataPass): 0.075 seconds.
----- pass 3 (CollateSymbolsPass) -----
Checking for forced tags with commits...
Done
Time for pass3 (CollateSymbolsPass): 0.053 seconds.
----- pass 4 (FilterSymbolsPass) -----
Filtering out excluded symbols and summarizing items...
Done
Time for pass4 (FilterSymbolsPass): 97.07 seconds.
----- pass 5 (SortRevisionSummaryPass) -----
Sorting CVS revision summaries...
Done
Time for pass5 (SortRevisionSummaryPass): 0.163 seconds.
----- pass 6 (SortSymbolSummaryPass) -----
Sorting CVS symbol summaries...
Done
Time for pass6 (SortSymbolSummaryPass): 2.268 seconds.
----- pass 7 (InitializeChangesetsPass) -----
Creating preliminary commit sets...
Done
Time for pass7 (InitializeChangesetsPass): 103.9 seconds.
----- pass 8 (BreakRevisionChangesetCyclesPass) -----
Breaking revision changeset dependency cycles...
Done
Time for pass8 (BreakRevisionChangesetCyclesPass): 20.86 seconds.
----- pass 9 (RevisionTopologicalSortPass) -----
Generating CVSRevisions in commit order...
Done
Time for pass9 (RevisionTopologicalSortPass): 20.90 seconds.
----- pass 10 (BreakSymbolChangesetCyclesPass) -----
Breaking symbol changeset dependency cycles...
Done
Time for pass10 (BreakSymbolChangesetCyclesPass): 55.48 seconds.
----- pass 11 (BreakAllChangesetCyclesPass) -----
Breaking CVSSymbol dependency loops...
Done
Time for pass11 (BreakAllChangesetCyclesPass): 74.64 seconds.
----- pass 12 (TopologicalSortPass) -----
Generating CVSRevisions in commit order...
Done
Time for pass12 (TopologicalSortPass): 74.56 seconds.
----- pass 13 (CreateRevsPass) -----
Mapping CVS revisions to Subversion commits...
Creating Subversion r1 (Project initialization)
Creating Subversion r2 (commit)
……
一直到cvs的最大版本号,期间可以看到tag号也被提交。(cvs,svn tag机制不同)
Creating Subversion r4717 (commit)
Done
Time for pass13 (CreateRevsPass): 64.68 seconds.
----- pass 14 (SortSymbolsPass) -----
Sorting symbolic name source revisions...
Done
Time for pass14 (SortSymbolsPass): 4.683 seconds.
----- pass 15 (IndexSymbolsPass) -----
Determining offsets for all symbolic names...
Done.
Time for pass15 (IndexSymbolsPass): 3.554 seconds.
----- pass 16 (OutputPass) -----
Starting Subversion Dumpfile.
Starting Subversion r1 / 4717
Starting Subversion r2 / 4717
……一直到最大版本号
Starting Subversion r4717 / 4717
Done.
Time for pass16 (OutputPass): 431.2 seconds.

cvs2svn Statistics:
------------------
Total CVS Files:             11061
Total CVS Revisions:         19671
Total CVS Branches:           2852
Total CVS Tags:            1340371
Total Unique Tags:             346
Total Unique Branches:           2
CVS Repos Size in KB:       564984
Total SVN Commits:            4717
First Revision Date:    Tue Aug  1 13:43:51 2006
Last Revision Date:     Fri Sep 10 17:54:27 2010
------------------
Timings (seconds):
------------------
 250   pass1    CollectRevsPass
   0   pass2    CleanMetadataPass
   0   pass3    CollateSymbolsPass
  97   pass4    FilterSymbolsPass
   0   pass5    SortRevisionSummaryPass
   2   pass6    SortSymbolSummaryPass
 102   pass7    InitializeChangesetsPass
  21   pass8    BreakRevisionChangesetCyclesPass
  21   pass9    RevisionTopologicalSortPass
  56   pass10   BreakSymbolChangesetCyclesPass
  76   pass11   BreakAllChangesetCyclesPass
  77   pass12   TopologicalSortPass
  67   pass13   CreateRevsPass
   5   pass14   SortSymbolsPass
   3   pass15   IndexSymbolsPass
 431   pass16   OutputPass
1208   total

 

 

4.2输出日志样例:

……省略一些小版本日志输出

这里是svnadmin在将我们dump 文件加载到版本库,它会从第1个版本号开始提交,直到最后一个版本号。

<<< Started new transaction, based on original revision 4713
     * editing path : trunk/webapps/base/op/product/productList4promotionBind.jsp ... done.
     * editing path : trunk/javasrc/baseproject/com/kanmenzhu/LoginAction.java ... done.

------- Committed new rev 4719 (loaded from original rev 4713) >>>

<<< Started new transaction, based on original revision 4714
     * editing path : trunk/javasrc/baseproject/com/kanmenzhu/UserService.java ... done.

------- Committed new rev 4720 (loaded from original rev 4714) >>>

<<< Started new transaction, based on original revision 4715
……
------- Committed new rev 4723 (loaded from original rev 4717) >>>

 

当最大版本号提交完毕,也就意味着迁移工作的基本完毕。

 

==================分隔线==============================

在完成4.1,4.2的测试后(之所以要测试,因为如果直接将整个CVS库进行操作,如果中途失败,开销的时间得不偿失,用小目录测试结果一样),访问新的SVN库,查看历史记录等是否正常。如果正常,则对整个CVS库进行迁移,迁移成功的结果应该是:

历史记录完整,包含提交人信息;CVS上的branchs,tags 信息被添加到SVN 的branchs,tags中。

 

5、完成以上操作后,将之前暂时移出来不需要历史记录的文档进行还原,即提交到新的SVN库。

 

 

 

 

 

===============================

2
0
分享到:
评论

相关推荐

    从CVS迁移至SVN的两种方法

    介绍了SVN-Importer和CVS2SVN两种从CVS迁移到SVN的两种方法,并把SVN-Importer和CVS2SVN软件打包在内。下载后直接可以使用。

    CVS迁移SVN工具亲测可用

    CVS迁移SVN工具亲测可用 1、cvs2svn-2.5.0.tar.gz 2、python 3、rcs57pc1 4、UnxUpdates 5、VisualSVNServer361x64

    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 ...

    CMake从入门到精通资源合集

    cmake 的流行其实要归功于 KDE4 的开发(似乎跟当年的svn 一样,KDE 将代码仓库从 CVS 迁移到 SVN,同时证明了 SVN 管理大型项目的可用性),在 KDE开发者使用了近 10 年autotools 之后,他们终于决定为 KDE4 选择一个...

    Cmake实践.pdf

    的流行其实要归功于KDE4的开发(似乎跟当年的svn一样,KDE将代码仓库从CVS迁移到 SVN,同时证明了SVN管理大型项目的可用性),在KDE开发者使用了近10年autotools 之后,他们终于决定为KDE4选择一个新的工程构建工具,...

    CMakePractice

    的流行其实要归功于 KDE4 的开发(似乎跟当年的 svn 一样,KDE 将代码仓库从 CVS 迁移到 SVN,同时证明了 SVN 管理大型项目的可用性),在 KDE 开发者使用了近 10 年 autotools 之后,他们终于决定为 KDE4 选择一个新的...

    CMake Practice中文版

    的流行其实要归功于 KDE4 的开发(似乎跟当年的 svn 一样,KDE 将代码仓库从 CVS 迁移到 SVN,同时证明了 SVN 管理大型项目的可用性),在 KDE 开发者使用了近 10 年 autotools 之后,他们终于决定为 KDE4 选择一个...

    cmake 基础教程 多平台工程构建工具

    svn一样,KDE将代码仓库从CVS迁移到SVN,同时证明了SVN管理大型项目的可用性),在KDE 开发者使用了近10年autotools之后,他们终于决定为KDE4选择一个新的工程构建工具,其根本原因 用KDE开发者的话来说就是:只有...

    服务器svn上的项目下载到eclipse

    互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。 服务器svn上的项目下载到eclipse 资源太大,传百度网盘了,链接在附件中,有需要的同学...

    TortoiseSVN-1.14.1.29085-x64-svn-1.14.1.zip

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

    svn及svn插件

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。

    ROSS:伦斯勒的乐观仿真系统

    欢迎使用简体ROSS!... 多年来,ROSS已从CVS迁移到SVN,再迁移到Git和GitHub.com。 该代码由Chris Carothers和他在RPI的研究生维护()。 多年来,在ROSS内实现了多种功能(包括共享内存版本)。 此后,

    SVN-RPM安装包

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。

    TortoiseSVN-1.14.6.29673-x64-svn-1.14.3

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

    SVN服务端与客户端

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支...互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

    TortoiseSVN-1.13.1.28686-x64-svn-1.13.0.zip

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

    SVN SVN客户端

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。

    svn-importer-1.2.zip

    SVN Importer可以进行CVS版本库到SVN版本库的迁移。

    32位+64位svn

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理...互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的

Global site tag (gtag.js) - Google Analytics