在多项目布局中逐步进行cvs2svn迁移

时间:2014-02-11 11:59:08

标签: svn cvs cvs2svn

我公司目前为其所有项目使用两个独立的CVS存储库。

我的老板选择在一种情况下迁移到SVN:迁移必须渐进,并且必须至少导致停机。

鉴于我将保留多存储库结构(因此客户软件转到repo1和内部软件到repo2,即使这种区别不是绝对必要的),我想问一下是否有可能定期提名从CVS迁移到SVN并将其迁移到现有存储库的项目。

让我更好地解释一下。为简单起见,仅举例说明了一个回购。

  • 第0天:SVN repo init
  • 第1天:新项目(称之为P)启动,开发人员提交SVN回购
  • 第2天:旧项目A,不再开发,是移民的候选人。所有开发人员都同意对CVS进行最新修改,并在迁移后使用SVN(如果他们需要)
  • 第3天:从步骤1或2重复循环

通常,cvs2svn可以生成一个转储文件(我已经做了几次成功的尝试),可以将svnadmin load导入到空的存储库中。通常cvs2svn可以用于为一个或多个选定的项目生成转储(有一些关于它的教程,都运行成功)。

全部放在一起

由于我可以随时为任何选定的CVS项目集生成转储,例如A,B,C,我可以(以及如何)使用这些转储来追加对SVN存储库的那些修订P和Q说,项目已经存在?

澄清:我希望文件系统布局看起来像

/svnroot
    /projectA
        /branches
        /tags
        /trunk
    /projectX
        /branches
        /tags
        /trunk

2 个答案:

答案 0 :(得分:2)

我打算给你一个稍微简单的回答,指出你想要的内容记录在cvs2svn常见问题解答中。但后来我意识到我几年前编辑了那部分FAQ条目(我的错误,对不起!)。所以我只是added it back to the FAQ,为你和后人。

我们的想法是将每个项目转换为转储文件,将其主干,分支和标记目录放在您希望它们结束的位置:

cvs2svn --dumpfile=/tmp/projectA.dump \
        --trunk=projectA/trunk \
        --branches=projectA/branches \
        --tags=projectA/tags \

然后将dumpfile加载到现有的Subversion存储库中:

svnadmin load /svnroot </tmp/projectA.dump

使用转储文件进行后续迁移的优点是Subversion存储库只需要在svnadmin load的持续时间内脱机,而不是在cvs2svn正在运行的整个时间内脱机。 / p>

答案 1 :(得分:1)

  

由于我可以随时为任何选定的CVS项目集生成转储,例如A,B,C,我是否(以及如何)使用这些转储将这些修订附加到SVN存储库中,其中项目(例如P和Q)已经存在?

是的,因为

a)创建转储只是执行cvs2svn的可能结果之一(其他是转换回购的直接导入)

b)导入其他不相交的转储也不会覆盖存储库中的旧数据

c)cvs2svn docs明确指出:

  

--existing-svnrepos将转换后的CVS存储库加载到现有的Subversion存储库中,而不是创建新的存储库。 (这个   选项应与-s / - svnrepos结合使用。)   存储库必须为空或不包含与之重叠的路径   那些将由转换产生的。请注意,您需要   写入存储库文件的权限。

(即你可以从中继到从现有主干到主干的修改,但是如果之前不存在则可以 - 到分支机构)