如何有效地为一个有很多依赖的c++产品使用git存储库/子模块
How to effectively use git repositories / submodules for a C++ product that has many dependencies?
我是Git的新手,还在摸索…我想我终于理解了整个分支/合并方面。但我仍然不确定处理项目依赖关系的最佳解决方案是什么。什么是最佳实践?这一定是一个常见的问题,但我找不到一个好的教程或最佳实践来做这件事。
假设我有一个c++产品,它依赖于其他几个c++库,最终构成了一个复杂的依赖关系图。库,如:其他内部开发的c++库,公共开源库,现成的闭源库
最终的c++产品的源代码依赖于它的依赖项的输出来编译。这些输出包括:
- 一系列c++头文件(注意没有c++实现文件)
- 一组编译后的二进制文件(LIB文件、DLL文件、EXE文件等)
我的理解是我应该把每个库都有自己的存储库。听起来Git的子模块就是我们要找的。特别是http://chrisjean.com/2009/04/20/git-submodules-adding-using-removing-and-updating/上的文章似乎是一个很好的介绍,我几乎可以理解。例如,我可以让我的主项目存储库引用特定的外部Git存储库作为子模块/依赖项。c++代码可以在适当的子模块目录中"#include"头文件。包含在主产品/存储库中的构建脚本可以继续递归地编译所有子模块。
现在的问题是:
您通常如何为每个存储库缓存二进制文件?我们的一些依赖需要几个小时来编译,并且不经常更新。使用上述方案,我可能会从服务器克隆/检出一个高级项目来修复一个小错误。据我所知,我还被迫克隆了构成这些开源依赖项的所有数千个文件——我担心这可能需要一些时间(尤其是在Windows上)。更糟糕的是,我难道不会被迫重新编译每个子模块吗,即使几个月来没有人修改过那个子模块?(似乎在每台开发人员计算机上都有某种本地"哈希表"方案,将更改集ID链接到一组编译的二进制文件将是方便的…)
(几年前我工作过的一个商店使用Mercurial,但是所有的代码-内部项目等都被卷进一个巨大的存储库中,当你从服务器克隆新创建的分支时,你必须在一个庞大的单片构建脚本中构建所有代码。当我们完成了修复/新特性并与上游合并时,我们删除了该特定分支的本地存储库。
我们正在Windows上进行开发,但最终将扩展到其他非微软平台-因此可移植性很重要。
通常这是一个坏主意,但是为什么不将二进制文件以及不经常更改的子模块的编译代码检入子模块中呢?这样,fetch将拉下bin,当您用更改的二进制文件编译新版本的依赖项时,您将看到二进制文件显示在git状态输出中。
- 在已经使用Git的情况下减少编译时间
- 使用Qt C++计算类似Git的SHA1哈希
- 如何在c++中从git建立外部库
- 我应该将除 .cpp 以外的其他文件添加到 git 中吗?
- 从C++程序调用 git 克隆
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 更改 git 分支名称后,在项目的 Visual Studio 代码中丢失智能感知(建议,转到定义C++
- 如何组织 git 工作流以修复错误并同时引入新功能
- 自动完成在git存储库中的Visual Studio项目中不起作用
- 在构建时执行execute_process以在构建时获取git提交哈希
- git 子模块的替代方案,用于使用多个存储库的项目
- 将 Git 提交哈希读取到C++时出错
- 使用 libgit2 从另一个分支创建新的 git 存储库?
- 如何在构建Qt应用程序时运行git命令
- 我被困在尝试克隆需要 cmake 文件和依赖项的 git 存储库中
- CMake Ninja Git 自签名证书颁发机构密码提示
- 如何从终端分离,以便 git 中的接收后钩子完成
- git-是否有互联网上某处所有可能错误的列表
- 如何使用 Eclipse 在 Git 中观察 CLion 项目
- 删除/最小化GIT合并冲突