从CVS到SVN的转换和重组分支

时间:2020-03-05 18:40:18  来源:igfitidea点击:

我正在从现有的CVS存储库转换为SVN存储库。 CVS存储库很少,我想在转换时重命名分支。

想要的转换是这样的:

CVS branch         SVN branch
HEAD       ->      branches/branchX
branchA    ->      trunk
branchB    ->      branches/branchB
branchC    ->      branches/branchC

也就是说,CVS HEAD成为普通分支,而CVS branchA成为SVN中继。

CVS和SVN存储库都将在同一台Linux计算机上。

怎么办呢?

同样,将CVS branchA变为SVN干线并且忽略所有其他CVS分支的转换可能就足够了。

解决方案

回答

Subversion分支是目录,因此我们可以在导入完成后移动分支,并且不会丢失任何历史记录。

回答

自从我完成了CVS-> SVN转换以来已经有一段时间了,距离我使用非平凡的分支结构进行转换可能已经更长了。由于SVN可以很容易地在目录树中移动,因此我们可以先进行整个转换,然后再在SVN中完全整理出主干/分支结构。

如果我们确实做到了这一点,并且正在SVN内遍历整个目录树,那么最好在每个树重命名/移动步骤之后进行提交。只是要记住一点。

回答

我对保存提交历史特别感兴趣。如果我在转换后重命名并在SVN中移动分支,将保留历史记录吗?

回答

I am especially interested in preserving commit history. If I rename and move branches around in SVN after the conversion, will the history be preserved?

是的。 Subversion还可跟踪目录结构的更改,即使文件在树中移动,所有版本历史记录也将保留。

我建议使用cvs2svn转换存储库,包括分支和标签。一旦存储库在Subversion中,我们就可以根据需要移动分支和标签。这也保留了实际标签和分支被重命名的历史,这在以后的历史环境中可能会很有趣。

回答

一些其他信息来支持已接受的答案:

cvs2svn不允许从中继到分支或者从分支到中继的转换

因此,一旦转换为svn,移动东西是最好的方法。

回答

转换后可以移动主干和分支目录,但这将需要显式的转换后SVN提交,该提交将保留在SVN历史记录中,从而使历史记录探索更加复杂。

但是我们确实可以通过使用--symbol-hints = symbol-hints.txt命令行选项或者(如果我们使用的是选项文件,则告诉cvs2svn将主干和分支存储到所需的SVN路径。转换)" SymbolHintsFileRule('symbol-hints.txt')"符号策略规则,其中" symbol-hints.txt"是一个包含以下内容的文件:

. .trunk. trunk branches/branchX .
. branchX branch trunk .

请注意,由cvs2svn自动生成的某些提交消息(例如,用于创建分支)将提及原始的分支名称。

回答

尽管可以在完成转换后在分支之间移动,但是最好设置cvs2svn配置文件来为每个现有分支确切指定所需的名称。这样做的好处之一是,FishEye将更好地理解输出。