使用cvs2svn转换具有混合分支模型的CVS存储库

时间:2012-02-07 16:28:02

标签: git svn cvs cvs2svn

我有一个遗留的CVS存储库,我想使用cvs2svn进行转换。我已经使用cvs2svn进行测试转换并遇到了一个我不确定如何解决的问题。

问题是只有CVS仓库中的某些目录是分支的。一些常见目录(包括根项目目录和Makefile)始终保留在HEAD上。这看起来像:

project/Makefile              # always on HEAD
project/bar/                  # HEAD, Release_01, Release_02, etc
project/config/               # always on HEAD
project/foo/                  # HEAD, Release_01, Release_02, etc
project/Makerules/            # always on HEAD
project/Makerules/Release_01  # always on HEAD, defines branches for Release_01 among other things
project/Makerules/Release_02  # always on HEAD, defines branches for Release_02 among other things

当我运行cvs2svn转换时,我得到了所有正确的分支,但是共享的“always on HEAD”文件丢失了。这些文件应该与分支提交时HEAD上的内容一起出现。

我不确定它是否有帮助,但是在任何分支上建立的官方构建标记构建中使用的所有文件都具有单调增加的构建号(即build_123是包含一堆文件的标记来自HEAD,build_124是一个Release_01版本,包含来自HEAD和Release_01分支的混合文件,build_125返回所有HEAD文件。)

我正在转换为git,但问题应该适用于任何输出存储库。如果只有转换为svn的解决方案,我可以进行两步转换。

我认为有三种方法可以解决这个问题:

  1. cvs2svn步骤的选项和/或自定义代码的一些组合,以使用修订时HEAD上存在的文件填充每个非HEAD分支
  2. 在导入git
  3. 之前对cvs2svn输出进行某种后处理
  4. 使用git-filter-branch在导入git
  5. 后重写git历史记录

    我错过了一个简单的解决方案吗?我应该接受不完美的导入并继续前进吗?现在只有一个活动分支(HEAD除外),但是要有完整而准确的历史记录也很有用。

0 个答案:

没有答案