`
lydawen
  • 浏览: 472403 次
  • 性别: 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的两种方法

    【从CVS迁移到SVN的两种方法】 随着版本控制系统的发展,越来越多的团队选择从CVS(Concurrent Versions System)转向SVN(Subversion),因为SVN提供了更强大的功能和更好的用户体验。本教程将详细解释如何使用两...

    将cvs转换为svn库的工具cvs2svn

    随着项目的发展,很多团队选择从CVS迁移到SVN,以利用后者的优势。 cvs2svn是一个开源工具,专门设计用来帮助用户平滑地将他们的CVS仓库转换为SVN格式。它能够保留原始CVS历史记录,使得迁移过程中不会丢失任何提交...

    CVS迁移SVN工具亲测可用

    【CVS迁移SVN工具亲测可用】 在软件版本控制领域,CVS(Concurrent Versions System)和SVN(Subversion)都是广泛使用的系统。CVS曾是许多项目的主要选择,但随着时间推移,SVN因其更先进的特性和更好的管理功能而...

    我的cvs2svn笔记

    总的来说,《我的cvs2svn笔记》是一份实用的资源,对那些希望从CVS迁移到SVN的用户来说,具有很高的参考价值。它不仅提供了详细的转换步骤,还有实例演示,使得整个迁移过程更为直观易懂。通过学习这份笔记,用户...

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

    ### CVS团队升级SVN团队的解决...从CVS迁移到SVN是一项复杂但值得的投资,不仅能提升团队的工作效率,还能提高代码的安全性和质量。通过遵循本文档提供的指南,团队可以顺利完成迁移过程,并在未来的工作中受益匪浅。

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

    将CVS库转换为SVN库

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

    svn学习资料

    本资料包涵盖了从基础到进阶的SVN知识,包括客户端、服务端的使用以及从CVS迁移到SVN的转换方法。 1. SVN基础概念: - 版本控制系统:SVN是版本控制系统的一种,用于记录文件和目录的修改历史,方便团队成员之间的...

    CMake从入门到精通资源合集

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

    CVS SVN VSS 对比 说明

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

    CMakePractice

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

    161203511沈勃序1

    《企业团队开发工具:SVN的深度解析》 在软件开发领域,版本控制系统是团队协作中不...随着越来越多的开发团队从CVS迁移到SVN,这一趋势也反映了软件开发工具的不断进化和优化,以适应日益复杂和协作密集的开发环境。

    CMake Practice中文版

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

    清除当前文件夹下的cvs、svn标识

    2. **切换版本控制系统**:当从CVS或SVN迁移到其他系统(如Git)时,需要先清除旧的版本控制信息,以便正确地初始化新的版本库。 3. **备份或共享代码**:在不涉及版本控制的情况下分享代码时,避免将CVS或SVN的元...

    将CVS库转换为SVN库用到的文件rcs57pc1.zip

    总的来说,从CVS到SVN的转换是一个涉及多个步骤的过程,"rcs57pc1.zip"中的工具是关键组件,它们帮助解析和迁移CVS库中的历史版本信息。这种转换能够使团队利用SVN的现代功能,提高开发效率和协作体验。

    svn-importer-1.2.zip

    这个过程通常在组织或项目决定从CVS迁移到更现代的SVN系统时进行。 【描述】描述中提到的SVN Importer是一个专用工具,能够帮助用户平滑地将现有的CVS版本历史迁移到SVN环境中。这样的迁移对于保留项目的历史记录、...

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

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

Global site tag (gtag.js) - Google Analytics