使用 CVS 时需要将项目主干转换为分支

Posted

技术标签:

【中文标题】使用 CVS 时需要将项目主干转换为分支【英文标题】:Need to convert a project trunk into a branch when using CVS 【发布时间】:2009-05-25 18:27:01 【问题描述】:

我正在使用 cvs2svn 将一个大型的多项目 CVS 存储库转换为 Subversion。它运行得非常好,但是有一些 CVS 项目确实应该是其他项目的分支。

使用选项文件,我可以指定项目“ShouldBeBranch”的主干应放置在“/OtherProject/branches/ShouldBeBranch”中,但我找不到避免为标签创建 Subversion 目录的方法和 ShouldBeBranch 项目的分支(它们是空的,但仍然创建)。

目前我能看到的唯一选择是在转换完成后从 Subversion 中删除目录,但我想知道是否有人知道可以在转换过程中完成此操作的方法?我还查看了符号提示文件,但是有 270 个项目通过索引号指定项目看起来太难了!

非常感谢, 大卫

【问题讨论】:

【参考方案1】:

大概你的“ShouldBeBranch”项目本身有分支和标签。您希望这些最终结果在哪里?

如果您只希望“ShouldBeBranch”项目的主干包含在转换中:

从“ShouldBeBranch”项目中排除所有其他符号 将其 trunk_path 设置为其他项目中的路径 在您的选项文件中将branchs_path 和tags_path 设置为None(这会阻止它们被创建)

添加“ShouldBeBranch”项目的选项文件部分将因此包含如下行:

run_options.add_project(
    # ...
    trunk_path='OtherProject/branches/ShouldBeBranch',
    branches_path=None,
    tags_path=None,
    # ...
    symbol_strategy_rules=[
        ExcludeRegexpStrategyRule(r'.*'),
        ],
    )

【讨论】:

ShouldBeBranch 实际上没有任何分支或标签,所以我认为“无”解决方案可以解决问题......我在任何地方都没有看到!谢谢,大卫 您好 mhagger,我使用的是 cvs2svn 2.1.1,它是 Ubuntu 9.04 中可用的软件包。使用该版本, cvs2svn 在尝试拆分路径时会引发异常: Traceback (last recent call last): ... File "/var/lib/python-support/python2.6/cvs2svn_lib/common.py", line 115、在path_split pos = path.rfind('/') AttributeError: 'NoneType' object has no attribute 'rfind' Exception AttributeError: "'NoneType' object has no attribute 'error'" in > 被忽略 这是在 2.2.0 中改变的东西吗?谢谢! 升级到最新版本的 cvs2svn(2.2.0 版),mhagger 的建议现在完美运行:没有创建虚假目录。非常感谢!【参考方案2】:

在导入后进行修复对我来说似乎是最好的事情。如果您将项目的项目\主干 svn 移动到分支\某处,Subversion 将只跟踪历史记录。

blog post 描述了一种使用转储/加载循环重命名路径的方法。这种方式会改变历史,因此当您回顾文件的历史时,它们似乎一直在分支\某物内。

如果您要返回旧版本,您会期望它位于 project\trunk 中。因此,我认为试图改变历史并不是一件好事。

【讨论】:

以上是关于使用 CVS 时需要将项目主干转换为分支的主要内容,如果未能解决你的问题,请参考以下文章

符号歧义和回购布局

将许多 CVS 模块转换为单个 SVN 存储库

cvs2svn迁移后的svn合并问题

源文件控制cvs到svn的转换?

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

svn 从主干切换到分支