我们有一个非常庞大的C++代码仓库,大小为80GB,包含近20万个文件,其中包含多个组件。
这些库(归档文件)是多个组件共用的,耦合度很高。
由于以上原因,Git操作和编译构建某个特定组件都需要很长时间。
请给出如何将这个单一仓库分成多个仓库的建议。
这些库(归档文件)是多个组件共用的,耦合度很高。
由于以上原因,Git操作和编译构建某个特定组件都需要很长时间。
请给出如何将这个单一仓库分成多个仓库的建议。
原始答案(2013年)
这意味着:
其次,只有当我们谈论一个巨大的repo时,git操作才会变慢。
git用于管理多个小型repos(甚至是git Linux内核repo也远远不如您提到的大小和文件数量)
因此你需要:
将庞大的git存储库分割成:
通过使用二进制依赖项来加速编译过程,特别是在进行单元或小型集成测试时: 而不是获取所有源代码并重新编译全部内容,您可以针对每个项目设置,让它们使用其他项目生成的二进制文件/exes以便于特定项目的编译和运行。
这取决于你的库与其他组件的紧密耦合程度。
OP user2463892 在评论中添加了:
我听说过 GIT 子模块,它可以帮助我们将大型代码库分割成多个部分。
我对此不熟悉,有人能帮我理解以下几个问题吗?1) GIT 子模块是如何工作的?它会将庞大的代码划分为多个仓库吗?这样我们就可以解决 GIT 缓慢的问题了吗?
子模块是在另一个仓库内声明的 git 仓库(该仓库成为“父”仓库)。
checkout
、log
、diff
和status
等命令更快。 Super
, RepoA
, RepoB
, RepoC
等... 然后是否可以编译所有这些仓库?RepoA
可以访问其他仓库(Super
,RepoB
,RepoC
等)中的库吗?
互相依赖关系仍然会存在,但您可以:repoB
或 repoC
使用。
目标是从仅源代码的依赖关系切换到(生成的)二进制依赖关系,其中 repoB
可以根据由 repoA
编译步骤生成的二进制文件进行编译。git filter-branch --prune-empty --subdirectory-filter foldername master