以前从未这样做过,所以我可能只是个菜鸟……我正在尝试将我们陈旧的 CVS 存储库迁移到 GitLab,但我不确定如何处理嵌套的 CVS 项目。我们有很多(即大约 1600 个 .project 文件散布在 CVS 存储库中)。有大约 10 年的提交,总计约 21GB,超过两个 CVS 存储库目录。
一般结构是 $client/$product 但其中大多数包含一堆子项目 - 通常非常多。
到目前为止我已经尝试过:
Monolithic:尝试导入较小的 CVS 存储库 - 第一次第 1 次内存不足(通过添加内存解决),第 5 次第 5 次时磁盘空间不足(无法真正添加磁盘,因为 vmware 数据存储几乎已满 -不要问!)。
按客户端:在一个客户端上完成 cvs2git,然后运行 git --fast-import,但随后我注意到所有子项目。Git 不关心合并的历史,但我们的编码员会。阅读 git 子模块,但不确定这是我需要的,因为整个项目通常都在同一个 CVS 存储库中,我发现它使克隆项目的过程变得复杂。
通过客户端内的项目:使用 (2) 中的产品,递归 CVS 存储库深度优先,查找 .project 文件;在使用 git --fast-import 导入子项目之前,为每个子目录创建了一个子目录并在每个子目录上执行了 git init --bare。这花了很长时间,因为我相信它每次都必须处理整个 cvs2git blob 和转储文件,而且我不确定我最终得到了正确的 git 层次结构。
所以...与其再挣扎,我想我会在这里问,因为我确定其他人一定需要做这种事情。任何指针都非常感谢。
[编辑]:感谢所有的建议和帮助,人们。现在已经不在我的掌控之中了——他们(开发人员)已经决定在他们工作的时候逐步迁移 CVS 项目,所以大多数可能永远不会被迁移。为此,旧的 cvs 将作为只读参考保留,并且项目将签入到 git “pristine”,因此对于任何“BG”(在 git 之前)历史,它们将引用 cvs,但对于“AG”的历史,他们会咨询 git。
至于深嵌套项目的问题,我给出的解释是它与Java类层次结构有关,每个项目相当于一个类。在他们的构建过程中有一些东西可以自动将 cvs 项目更改为 java .jar 文件或类似的东西。里面有很多java。