两个 CVS 项目合并为一个 SVN 项目
Posted
技术标签:
【中文标题】两个 CVS 项目合并为一个 SVN 项目【英文标题】:Two CVS projects into one SVN project 【发布时间】:2010-04-22 23:29:19 【问题描述】:我有两个 CVS 项目,我在 Eclipse 中维护。我签出第一个项目,对于第二个项目,我使用“在现有项目中签出”选项,因此我能够将两个 CVS 项目维护到一个 Eclipse 项目中。这样做我可以用相同的标签等标记两个项目。
知道,现在是开始使用 SVN 的时候了。我能够创建两个单独的 CVS 转储文件,当我使用 svnadmin 加载到 SVN 存储库时,我无法保持 CVS 中的结构!
所以,当我将两个转储分别导入 SVN 时,我得到以下结构:
项目 - 分枝 标签 后备箱
项目B 分支机构 标签 后备箱
在 CVS 中,我能够将 ProjB 作为 ProjA 主干的子文件夹!
有什么方法可以使用 SVN 来实现吗?
【问题讨论】:
【参考方案1】:项目的 Subversion 概念是“你作为一个单元标记和分支的那个”。同时标记或分支单独的项目很麻烦,无论它们是在单独的 Subversion 存储库中还是在单个存储库中的子项目。我熟悉的其他现代 VCS 也有同样的限制。
所以我想问题是:如果您想同时标记或分支这些“项目”,它们真的是独立的项目,还是应该将它们视为单个“主”项目中的子目录?如果它们是单个项目的一部分,那么同时标记或分支它们是微不足道的,当然单独标记或分支它们会变得更加麻烦。
我建议遵循以下经验法则:项目是将与单个版本号一起发布的一组文件。如果您的“项目”通常会在单个版本号下发布,那么将它们视为单个项目的子目录。如果它们将使用单独的版本号单独发布,则将它们视为单独的独立项目。
【讨论】:
我将尝试从 CVS 获取整个“主”项目,并且标记会很简单,但问题是我正在使用细化脚本来获取 CVS 转储,并且因为项目很大,refine 无法处理,所以我尝试使用单独的子文件夹进行细化。 (逐个)。只有细化才能处理我的项目(cvs2svn 不能)。【参考方案2】:如果它们是真正独立的项目,您可以做的一件事是使用svn:externals,这将允许您使其中一个存储库引用(并自动从另一个存储库下载内容)。
【讨论】:
我试过这个,但问题是我在eclipse下使用子剪辑功能“标签”,当我将外部值设置为ProjA的ProjB时,在ProjA的文件中我可以看到我之前创建的标签(使用配置标签/分支),但是在 ProjB 的所有文件中,没有标签!我尝试设置 ProjB 的外部标签(仅检查 ProjB 并配置标签),但在设置外部属性时我没有得到任何结果。此外,当我在新项目 ProjA 中使用外部 ProjB 进行标记时,我无法得到我想要的。【参考方案3】:在 SVN 中,您可以将文件和文件夹移动到您想要的位置。
查找svn move
命令。
【讨论】:
我无法用“move”命令完成我不会做的事情,因为如果我不能只获得 ProjB 主干文件夹作为 ProjA 主干的子目录 move -m " svn://server/test/sqloracle svn://server/test1/popiscdc/trunk/sqloracle 找不到存储库 svn: No repository found in 'svn:/ /服务器' - @komunca:您写道:“所以,当我将两个转储分别导入 SVN 时,我得到以下结构:[...] 在 CVS 中,我能够将 ProjB 作为ProjA 后备箱!”我假设您已经在 SVN 存储库中拥有这两个项目。 导入它们后,您可以将一个移入另一个 - 如果 它确实是它的子项目。 (请参阅 mhagger 对这个问题的出色回答。)以上是关于两个 CVS 项目合并为一个 SVN 项目的主要内容,如果未能解决你的问题,请参考以下文章