0

以前从未这样做过,所以我可能只是个菜鸟……我正在尝试将我们陈旧的 CVS 存储库迁移到 GitLab,但我不确定如何处理嵌套的 CVS 项目。我们有很多(即大约 1600 个 .project 文件散布在 CVS 存储库中)。有大约 10 年的提交,总计约 21GB,超过两个 CVS 存储库目录。

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

到目前为止我已经尝试过:

  1. Monolithic:尝试导入较小的 CVS 存储库 - 第一次第 1 次内存不足(通过添加内存解决),第 5 次第 5 次时磁盘空间不足(无法真正添加磁盘,因为 vmware 数据存储几乎已满 -不要问!)。

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

  3. 通过客户端内的项目:使用 (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。

4

2 回答 2

0

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

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

例如这样做。请注意,您可以执行某种递归复制而不是符号链接。

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

/opt/convertrepos/CVSROOT #dummy empty directory to fool cvs2git
                 /project1 -> /opt/cvsrepos/path/to/project1
  • 您可以临时将整个 cvs 存储库复制到其他地方来进行转换,那里有更多的磁盘空间和内存吗?
  • 无论您是要创建一个单一的存储库还是许多单独的存储库,都是一个完全基于意见的事情,这超出了 stackoverflow 的目的。我也不清楚这些项目是否需要彼此。如果不是,那么您在该选择中具有更大的灵活性。
于 2016-12-26T07:26:31.440 回答
0

通常,在转换为 git 时,不可能保留集中存储库中包含的所有信息,尤其是像 CVS 这样不完善的信息。所以我认为你根本不应该尝试。保留原始存储库以供历史参考,并将当前正在开发的项目转换为仅 git。您甚至不必进口整整 10 年的产品,2-3 年就足够了。

于 2016-12-27T15:42:44.490 回答