CVS 到 SVN 的迁移和分支内的分支

Posted

技术标签:

【中文标题】CVS 到 SVN 的迁移和分支内的分支【英文标题】:CVS to SVN migration and Branch within a branch 【发布时间】:2012-04-19 18:14:25 【问题描述】:

我最近使用 cvs2svn 工具从 CVS 迁移到 SVN。在我的一个项目的新迁移项目中,最新版本是分支 A(父目录)的一部分。在这个项目中,我有一个子项目,它的最新版本是另一个分支,比如Branch B.所以基本上trunk没有我的主项目的最新版本。

所以在 CVS 中,一旦我签出我的父文件夹(分支 A),我将浏览到我的子项目 > 右键单击​​ > CVS > 更新特殊 > 选择分支 B(因为分支 B 具有子项目的最新版本)。这将检查子项目的最新版本,我将拥有我的主项目的最新版本。

然而,在 SVN 中,我没有看到这个选项。据我所知,SVN 只能使用修订版而不是分支进行更新。我是 SVN 的新手,所以我错的可能性更大。有没有办法做我在 CVS 场景中尝试做的事情?

我想出了一个检查主项目(分支 A)然后分别检查子项目(分支 B)的方法。然后我会从第一个结帐(父项目-Branch A)中删除这个子项目,并用子项目的第二个结帐版本替换它。

【问题讨论】:

【参考方案1】:

您可以通过svn externals 实现您的目标。该子项目将是另一个 repo 的外部项目。

【讨论】:

【参考方案2】:

听起来您正在尝试进行稀疏分支。在稀疏分支中,您有一个分支作为您的基础(我们将称为 Branch A),而在另一个分支上(我们将称为 Branch B),您只需将从分支 A 更改,而不是整个分支。

这有时在 CVS 中完成,因为分支需要很长时间才能完成。我们发现小型项目需要 20 分钟,大型项目则需要一个小时。但是,它最终很难跟踪,而且我发现使用它的网站往往会忘记结帐的方式。持续构建系统也无法处理 CVS 稀疏分支设置。

Subversion 不做稀疏分支(至少很容易),但 Subversion 中的分支快速且简单。创建一个分支只需不到一秒钟。在 Subversion 中,您应该取出 Branch A,并从 Branch A 创建 Branch B。然后,将 Branch ABranch B 之间的所有差异放到 Branch A 上。 Branch A 的更改必须定期合并到 Branch B

稀疏分支的问题是,如果一个文件在两个分支上都发生了变化,它就永远不会被拾取。通过合并,两个分支上的更改将添加到 Branch B 上的文件中。这就是为什么很少有网站做稀疏分支的原因。

您需要从 Branch A 创建一个新的 Branch B,然后将旧 Branch B 上的所有更改这个新的Branch B并将其签入。然后,Branch B 将包含它需要的所有文件,您可以使用持续集成系统,并且签入和签出文件是一步操作。

【讨论】:

感谢您的回复。我通过使用 switch 命令实现了这一点。我按照自己的意愿将子项目切换到另一个分支。

以上是关于CVS 到 SVN 的迁移和分支内的分支的主要内容,如果未能解决你的问题,请参考以下文章

将特定的 SVN 分支迁移到 GIT(2018 年迁移的主干)

使用没有主干标签和分支的 SVN 存储库从 SVN 迁移到 Git

将 svn 迁移到 git,分支名称中有空格

SVN到Git的一键迁移脚本(保留所有分支、Tag及提交记录)

SVN安装配置和使用

svn的简单知识