使用 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在导入后进行修复对我来说似乎是最好的事情。如果您将项目的项目\主干 svn 移动到分支\某处,Subversion 将只跟踪历史记录。
blog post 描述了一种使用转储/加载循环重命名路径的方法。这种方式会改变历史,因此当您回顾文件的历史时,它们似乎一直在分支\某物内。
如果您要返回旧版本,您会期望它位于 project\trunk 中。因此,我认为试图改变历史并不是一件好事。
【讨论】:
以上是关于使用 CVS 时需要将项目主干转换为分支的主要内容,如果未能解决你的问题,请参考以下文章