【问题标题】:What's the Git way to work with C++ projects that share the same code at different revisions?Git 处理在不同版本共享相同代码的 C++ 项目的方式是什么?
【发布时间】:2017-03-08 20:50:10
【问题描述】:

让我们考虑以下场景来简化问题。

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

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

编译项目 1,您需要 Common Code 版本 1(例如旧版本)。 要编译项目 2,您需要 Common Code 版本 2(例如较新的版本)。

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

项目 1 和 2 将保留他们的故事,并且他们可能需要不同的旧版本的通用代码进行编译,即使 通用代码在其个人故事中进步

我需要在同一天在同一台机器上多次切换完成所有项目,因此工作模型不能太复杂以避免错误或问题。 p>

我是否应该使用 3 个并行存储库编译时 解决对版本的编译依赖性(例如,通过签出正确的版本编译前的回购)?还有其他更好的解决方案(例如Git Submodules)吗?

【问题讨论】:

    标签: c++ git


    【解决方案1】:

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

    How to check out specific version of a submodule using git submodule?

    【讨论】:

      【解决方案2】:

      你可以使用

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-03
        • 2014-04-21
        • 2020-07-09
        • 1970-01-01
        • 2017-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多