使用 Git 如何处理在不同修订版共享相同代码的C++项目?

What's the Git way to work with C++ projects that share the same code at different revisions?

本文关键字:共享 修订版 代码 项目 C++ 何处理 Git 处理 使用      更新时间:2023-10-16

考虑到以下情况,让我们简化问题。

我正在使用存储在三个不同 Git 存储库中的三个C++项目。所有项目都需要位于单独的存储库中,因为它们在开发过程中需要独立

  • 项目 1
  • 项目 2
  • 通用代码项目

编译项目 1,您需要通用代码版本 1(例如旧版本)。 要编译项目 2,您需要通用代码版本 2(例如更新的版本)。

有时,您希望将公共代码项目作为独立项目(一种独立的共享库)使用,编译它,进行测试,并可能使用新版本,分支等进行改进。

项目1和2将保留他们的故事,即使《共同守则》在其个人故事中取得进展,他们也可能需要不同的旧版本的《共同守则》进行汇编。

我需要在同一天处理同一台机器上的所有项目,在它们之间多次切换,因此工作模型不会太复杂以避免错误或问题。

我是否应该使用3 个并行存储库在编译时解决版本的编译依赖关系(例如,通过在编译检查存储库的正确版本)?有没有其他更好的解决方案(例如Git 子模块)?

这听起来像是一个 git 子模块任务。使用子模块,您可以在特定修订版引用另一个存储库。

如何使用 git 子模块签出子模块的特定版本?

你可以使用

  1. git submodules(不是真的推荐,很难维护,如果你搞砸了,git 会进入奇怪的狂暴状态 - 例如从 git 下面删除一个子模块目录,所以它真的很脆弱)
  2. git subtree,可能以更方便的git subrepo形式 (https://github.com/ingydotnet/git-subrepo) - 这会导致一些代码重复,所以我也会谨慎使用它,尤其是在项目很大的情况下。
  3. repo工具 - https://code.google.com/p/git-repo/

使用repo,您需要设置一个manifest repository,该将描述从哪些存储库,哪些修订以及填充项目部件的目录中。这允许您完全独立地开发组件,并锁定到这些项目的某些版本,同时保持清晰的历史记录 -manifest repository是单独版本控制的,并且可以具有特定软件版本的标记。