多项目布局中的逐步 cvs2svn 迁移
Posted
技术标签:
【中文标题】多项目布局中的逐步 cvs2svn 迁移【英文标题】:Gradual cvs2svn migration in multiproject layout 【发布时间】:2014-02-11 11:59:07 【问题描述】:我的公司目前为其所有项目使用两个独立的 CVS 存储库。
我的老板选择在一个条件下迁移到 SVN:迁移必须是渐进的,并且必须至少造成停机时间。
鉴于我将保留多存储库结构(因此客户软件转到 repo1,内部软件转到 repo2,即使这种区别不是严格必要的),我想问是否可以定期提名 一个用于从 CVS 迁移到 SVN 并将其迁移到现有存储库的项目。
让我解释得更好。为简单起见,举一个仅涉及一个 repo 的示例。
第 0 天:SVN 存储库初始化 第 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
【问题讨论】:
【参考方案1】:我打算给你一个稍微简短的回答,指出你想要的内容记录在 cvs2svn
常见问题解答中。但后来我意识到我在几年前删除了常见问题解答条目的那部分(我的错误,对不起!)。所以我只是added it back to the FAQ,为了你和后代。
想法是将每个项目转换为转储文件,将其主干、分支和标签目录放置在您希望它们结束的位置:
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
运行的整个时间内脱机。
【讨论】:
【参考方案2】:由于我可以随时为任何选定的 CVS 项目集生成转储,比如 A、B、C,我可以(以及如何)使用这些转储将这些修订附加到项目所在的 SVN 存储库,比如 P 和 Q,已经存在?
是的,因为
a) 创建转储只是执行 cvs2svn 的可能结果之一(其他是直接导入转换后的 repo)
b) 导入额外的不相交转储不会覆盖存储库中的旧数据
c)cvs2svn docs 明确指出:
--existing-svnrepos
将转换后的 CVS 存储库加载到现有的 Subversion 存储库中,而不是创建新的存储库。 (这 选项应与 -s/--svnrepos 结合使用。) 存储库必须为空或不包含与 那些将由转换产生的。请注意,您需要 存储库文件的写入权限。
(即您不能从主干中从转储到现有主干进行修订,但可以 - 到分支,如果它们之前不存在)
【讨论】:
... 因为我确信项目有不同的名称,所以它们的路径永远不会重叠!几天后我会在测试机上进行空运行时接受它以上是关于多项目布局中的逐步 cvs2svn 迁移的主要内容,如果未能解决你的问题,请参考以下文章