我公司目前为其所有项目使用两个独立的CVS存储库。
我的老板选择在一种情况下迁移到SVN:迁移必须渐进,并且必须至少导致停机。
鉴于我将保留多存储库结构(因此客户软件转到repo1和内部软件到repo2,即使这种区别不是绝对必要的),我想问一下是否有可能定期提名从CVS迁移到SVN并将其迁移到现有存储库的项目。
让我更好地解释一下。为简单起见,仅举例说明了一个回购。
通常,cvs2svn
可以生成一个转储文件(我已经做了几次成功的尝试),可以将svnadmin load
导入到空的存储库中。通常cvs2svn
可以用于为一个或多个选定的项目生成转储(有一些关于它的教程,都运行成功)。
由于我可以随时为任何选定的CVS项目集生成转储,例如A,B,C,我可以(以及如何)使用这些转储来追加对SVN存储库的那些修订P和Q说,项目已经存在?
澄清:我希望文件系统布局看起来像
/svnroot
/projectA
/branches
/tags
/trunk
/projectX
/branches
/tags
/trunk
答案 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结合使用。) 存储库必须为空或不包含与之重叠的路径 那些将由转换产生的。请注意,您需要 写入存储库文件的权限。
(即你可以从中继到从现有主干到主干的修改,但是如果之前不存在则可以 - 到分支机构)