12

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

所以,它有时看起来像这样:

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

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

以下是我的担忧:

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

据我了解,规范的答案之一是“使用git submodule ”。但是,我读到了一些关于这种方法的批评。我觉得它更像是为很少更改的共享库而设计的。

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

还有一些不太流行的方法:RepoGitSlave

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

4

1 回答 1

4

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

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

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

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

于 2013-01-22T07:08:14.790 回答