拆分大型git存储库 我们有一个大型的C++存储库,大小为80 GB,拥有200000个文件,包含多个组件。p>
库(归档)对于更多具有紧密耦合的组件是通用的 在这种情况下,所有git操作和编译/构建特定组件花费的时间太长 请告诉我如何将单个回购分为多个回购。首先,200000个源文件可能占用不到80GB的空间(除非每个文件代表400KB的源文件!) 2015年更新:git lts实际上可以管理此类卷。拆分大型git存储库 我们有一个大型的C++存储库,大小为80 GB,拥有200000个文件,包含多个组件。p>,git,split,Git,Split,库(归档)对于更多具有紧密耦合的组件是通用的 在这种情况下,所有git操作和编译/构建特定组件花费的时间太长 请告诉我如何将单个回购分为多个回购。首先,200000个源文件可能占用不到80GB的空间(除非每个文件代表400KB的源文件!) 2015年更新:git lts实际上可以管理此类卷。 见“” 原始答复(2013年) 这意味着: 任何生成的二进制文件都需要从git repo中排除 任何大的二进制文件都需要存储在其他地方(可以存储在a中,也可以存储在任何其他存储空间中,如) 第二,只有
见“”
原始答复(2013年) 这意味着:
- 任何生成的二进制文件都需要从git repo中排除
- 任何大的二进制文件都需要存储在其他地方(可以存储在a中,也可以存储在任何其他存储空间中,如)
git是用来管理多个小型回购协议的(即使是最大的回购协议也远不及您提到的文件大小和数量) 因此,您需要:
- 要拆分巨额git回购,请执行以下操作:
- 功能组件(组件是一组连贯的文件,表示程序的主要功能:GUI、调度器、启动器,以及实现程序主要功能块的任何东西)
- 技术组件(所有这些公共技术库,由多个其他组件重用,提供最终用户看不到的功能,仅由开发人员使用)
- 通过使用二进制依赖关系,加快编译过程,尤其是在进行单元或小型集成测试时:您可以设置每个项目,以便它们使用其他项目生成的二进制文件/EXE,而不是获取所有源代码并重新编译所有内容。
这取决于库和其他组件的紧密耦合程度
报告补充说: 我听说了一些关于GIT子模块的事情,这将有助于划分或拆分大型代码库。
我不熟悉这一点,有人能帮我理解以下关于这一点的几个问题吗 1) git子模块是如何工作的?它会将庞大的代码分成多个回购协议吗?有了这个,我们可以解决GIT缓慢的问题吗 子模块是在另一个回购(成为“父”回购)中声明的git回购
- 有关子模块的一般说明,请参见
- 关于在子模块中可以执行的操作,请参见我的
克隆父回购时,默认情况下不会克隆其中声明的所有子模块 在您的例子中,这可能很有趣,因为您不需要克隆所有源代码来进行您提到的那种增量编译。
另外,多笔回购意味着更小的回购,像
签出
、日志
、差异
和状态
这样的命令进行得更快
2) 假设我们使用此子模块将主回购分为多个回购。。。这能否解决我们面临的问题(回购协议之间的依赖性)
示例:假设我们将主要核心回购分为Super
,RepoA
,RepoB
,RepoC
等
那么,是否有可能将所有这些回购合并在一起?RepoA
能否从其他repo(Super
,RepoB
,RepoC
等)访问库,反之亦然
相互依赖关系仍然存在,但您可以:
- 结帐仅用于指定步骤所需的回购
- 将编译后的库存储在这些repo之外,以便
或repoB
使用李>repoC
目标是从仅源代码的依赖项切换到(生成的)二进制依赖项,其中可以基于
repoA
编译步骤生成的二进制文件编译repoB
。您可以使用以下命令在Github中为文件夹创建存储库
git filter-branch --prune-empty --subdirectory-filter foldername master
这假设您已经确定了要提取的组件,并且在创建存储库后对构建过程进行了排序
参考: