如何将CVS中的项目迁移到svn中?

yuanye348623610 2014-03-28 09:52:45
如何将局域网中windows server 服务器上CVS中的项目迁移到远程Linux服务器的svn中?要求保留CVS中的历史记录。
...全文
349 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
青松2 2014-03-29
  • 打赏
  • 举报
回复
CVS迁移到SVN 博客分类: 挨踢 CVSSVNLinuxsubversionPython 去年刚入职现所在公司时,做过一个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库。

1,277

社区成员

发帖
与我相关
我的任务
社区描述
软件工程 CVS/SVN
社区管理员
  • 版本控制社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧