1

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

我的老板选择在一个条件下迁移到 SVN:迁移必须是渐进的,并且必须至少造成停机时间。

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

让我解释得更好。为简单起见,举一个仅涉及一个 repo 的示例。

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

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

把它们放在一起

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

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

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

2 回答 2

2

我打算给你一个稍微简短的答案,指出你想要的东西记录在cvs2svn常见问题解答中。但后来我意识到我在几年前删除了常见问题解答条目的那部分(我的错误,对不起!)。因此,我只是将其添加回常见问题解答中,供您和后代使用。

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

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

然后将转储文件加载到现有的 Subversion 存储库中:

svnadmin load /svnroot </tmp/projectA.dump

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

于 2014-02-15T16:40:20.420 回答
1

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

是的,因为

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

b) 导入额外的不相交转储不会覆盖存储库中的旧数据

c) cvs2svn 文档明确指出:

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

(即你不能从转储到现有的主干从主干修改,但可以 - 到分支,如果它们以前不存在)

于 2014-02-11T16:00:13.893 回答