2013-01-21 147 views
6

我有两个紧密相关的项目(A和B)共享一些源代码(S)。它们都将同时发布,并且发布版本应始终使用相同版本的共享代码。共享代码S会经常更改。在git中共享两个项目之间的代码

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

  • 1版采用S版1
  • B版1采用S版1
  • 第2版采用S版2
  • 乙版本2使用S版本2

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

这里是我的顾虑:

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

据我所知,规范的答案之一是“使用git submodule”。但是,我读了一些关于这种方法的criticism。我觉得它更适合于共享很少变化的库。

另一种方法,我看用git subtree

而且有几个不太流行的方法:RepoGitSlave

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

+0

链接不是好的,我固定了子树但不能猜测其他(使用git submodule和批评) – CharlesB

+0

谢谢。我修复了除一个之外的所有链接如果我插入它,出于某种原因它链接到错误的链接。 –

+0

你可以直接在降价代码中修复它 – CharlesB

回答

3

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

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

如果开发人员拥有旧版本的共享存储库,则第二行将具有非零返回值。这会导致编译错误。然后,开发人员可以手动进行并取出存储库。

除了检查S的主分支,还可以检查其他一些定义为开发人员应该使用的分支。

相关问题