使用 Git 如何处理在不同修订版共享相同代码的C++项目?
What's the Git way to work with C++ projects that share the same code at different revisions?
考虑到以下情况,让我们简化问题。
我正在使用存储在三个不同 Git 存储库中的三个C++项目。所有项目都需要位于单独的存储库中,因为它们在开发过程中需要独立。
- 项目 1
- 项目 2
- 通用代码项目
要编译项目 1,您需要通用代码版本 1(例如旧版本)。 要编译项目 2,您需要通用代码版本 2(例如更新的版本)。
有时,您希望将公共代码项目作为独立项目(一种独立的共享库)使用,编译它,进行测试,并可能使用新版本,分支等进行改进。
项目1和2将保留他们的故事,即使《共同守则》在其个人故事中取得进展,他们也可能需要不同的旧版本的《共同守则》进行汇编。
我需要在同一天处理同一台机器上的所有项目,在它们之间多次切换,因此工作模型不会太复杂以避免错误或问题。
我是否应该使用3 个并行存储库在编译时解决版本的编译依赖关系(例如,通过在编译前检查存储库的正确版本)?有没有其他更好的解决方案(例如Git 子模块)?
这听起来像是一个 git 子模块任务。使用子模块,您可以在特定修订版引用另一个存储库。
如何使用 git 子模块签出子模块的特定版本?
你可以使用
git submodule
s(不是真的推荐,很难维护,如果你搞砸了,git 会进入奇怪的狂暴状态 - 例如从 git 下面删除一个子模块目录,所以它真的很脆弱)git subtree
,可能以更方便的git subrepo
形式 (https://github.com/ingydotnet/git-subrepo) - 这会导致一些代码重复,所以我也会谨慎使用它,尤其是在项目很大的情况下。repo
工具 - https://code.google.com/p/git-repo/
使用repo
,您需要设置一个manifest repository
,该将描述从哪些存储库,哪些修订以及填充项目部件的目录中。这允许您完全独立地开发组件,并锁定到这些项目的某些版本,同时保持清晰的历史记录 -manifest repository
是单独版本控制的,并且可以具有特定软件版本的标记。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 将静态库链接到不带-fPIC的共享库中
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 无法在Ubuntu上将共享库与Eclipse链接
- 从python调用openMP共享库时,未定义opnMP函数
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 为什么我的共享库中存在展开符号
- 使用共享指针的函数调用,其对象应为 const
- 具有两个独占锁组的共享锁
- 共享队列的线程安全
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 多个"常量引用"变量可以共享同一个内存吗?
- 如何访问由共享指针保存的类方法?
- 使用 Git 如何处理在不同修订版共享相同代码的C++项目?