我有两个紧密相关的项目(A和B),它们共享一些源代码(S)。两者将同时发布,发布的版本应始终使用相同版本的共享代码。共享代码S将经常合理地更改。

因此,它有时看起来像这样:

  • A版本1使用S版本1
  • B版本1使用S版本1
  • 版本2使用S版本2
  • B版本2使用S版本2

  • 用git(和/或某些使用git的工具)处理此问题的最佳方法是什么?

    这是我的担忧:
  • 项目A和项目B应该在单独的存储库中(它们是相关的,但是我不想它们之间有自由的代码流)
  • 如果在一个项目中更新了共享代码,则应该在另一个项目中自动更新它(我不希望开发人员忘记做某事,而最终拥有的共享代码版本过时)。

  • 据我了解,规范的答案之一是“use git submodule”。但是,我阅读了有关此方法的一些criticism。我觉得它是专为很少更改的共享库设计的。

    我读过的另一种方法是使用git subtree

    还有一些不太受欢迎的方法:RepoGitSlave

    处理此类代码共享的最佳方法是什么?

    最佳答案

    一个非常简单的解决方案是使用三个存储库:A,B和S。项目存储库A和B将在其Makefile中进行检查,以验证开发人员是否正在使用推送到存储库的最新代码。

    check:
          git fetch /path/to/S master:tip
          git branch --contains tip | grep -q master
    

    如果开发人员具有共享存储库的旧版本,则第二行的返回值将为非零。这将以错误中止编译。然后,开发人员可以手动 pull 出存储库以继续。

    除了检查S的主分支之外,您还可以检查其他一些分支,这些分支被定义为始终是开发人员应使用的分支。

    关于git - 在git中的两个项目之间共享代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14445101/

    10-14 18:56
    查看更多