如何处理大量嵌套的CVS项目

时间:2016-12-23 12:15:46

标签: git cvs2svn cvs2git

之前从未这样做过,所以我可能只是一个菜鸟......我试图将我们陈旧的CVS存储库迁移到GitLab,我不知道如何处理嵌套的CVS项目。我们有很多(即大约1600个.project文件点缀在CVS回购中)。在两个CVS存储库目录中,总共大约21GB,提交了大约10年的提交。

一般结构是$ client / $ product,但其中大部分包含一堆子项目 - 通常很多。

到目前为止我已尝试过:

  1. Monolithic:尝试导入较小的CVS repo - 第一次在第1次传输时耗尽内存(通过添加内存解决)并在第5次传递时耗尽磁盘空间(无法真正添加)磁盘作为vmware数据存储区几乎已满 - 请不要问!)。

  2. 客户端:cvs2git在一个客户端上完成,然后运行git --fast-import,但我注意到了所有的子项目。 Git并不关心合并的历史,但我们的编码员会。阅读git子模块,但不确定这是我需要的,因为整个项目通常在同一个CVS仓库中,我发现它使克隆项目的过程变得复杂。

  3. 通过客户端内的项目:使用(2)中的产品,使用find递归CVS repo depth-first,查找.project文件;在为git --fast-import导入子项目之前,为每个子目录创建了一个子目录,并在每个子目录上执行了git init --bare。这需要很长时间,因为我认为它必须每次都使用整个cvs2git blob并转储文件,而且我不确定我是否得到了适当的git层次结构。

  4. 所以...而不是再次挣扎,我想我在这里问,因为我确定其他人必须要做这种事情。任何指针都非常感激。

    [edit]:感谢所有人的建议和帮助。它现在不在我的手中 - 他们(开发者)决定在他们工作时逐步迁移CVS项目,因此大多数人可能永远不会被移动。为了这个目的,旧的cvs将作为只读参考保留,并且项目将被签入git" pristine"所以对于任何" BG" (在git之前)历史,他们将参考cvs,但对于" AG"历史,他们会咨询git。

    至于深层嵌套项目的问题,我给出的解释是它与Java类层次结构有关,每个项目等同于一个类。他们的构建过程中有一些东西会自动将cvs项目更改为java .jar文件或类似的东西。那里有很多java。

2 个答案:

答案 0 :(得分:0)

我不太确定你在问什么,但这里有一些评论,希望其中一个或多个能回答你的问题。

  • 你想分别将每个项目单独转换为git吗?我无法从你的问题中说出来。但是如果你这样做,你可以复制每个项目的目录树并在其上运行cvs2git。 (或者甚至可能只是创建符号链接以节省空间,只要嵌套允许它。)一次循环一个。在这种情况下,CVS服务器端后端文件存储的简单性是一种祝福。

e.g。这样做。请注意,您可以执行某种递归副本而不是符号链接。

/opt/cvsrepos/CVSROOT
             /path/to/project1
                     /project2

/opt/convertrepos/CVSROOT #dummy empty directory to fool cvs2git
                 /project1 -> /opt/cvsrepos/path/to/project1
  • 您是否可以暂时将整个cvs存储库复制到其他地方进行转换,哪里有更多的磁盘空间和内存?
  • 是否要创建一个单一的存储库或许多单独的存储库是一个完全基于意见的事情,超出了stackoverflow的目的。我不清楚这些项目是否相互需要。如果没有,那么您可以更灵活地选择。

答案 1 :(得分:0)

通常,在转换为git时,无法保留集中式存储库中包含的所有信息,尤其是CVS不完善的信息。所以我认为你根本不应该尝试。保留原始存储库以供历史参考,并转换为仅当前正在开发的git项目。你甚至不需要进入整整10年的他们,2 - 3年就足够了。