单独的Git项目(存储库)中的共享存储库

时间:2013-03-26 13:40:31

标签: git version-control branch

我已经看过很多类似的Q& A,所以我会在前面道歉,看起来像是一个重复的问题。但是我已经阅读了所有我能找到的内容(这里和网上一般),但我仍然没有答案。

我们目前使用SVN(Tortoise和Ankh是工具)作为我们的VCS,正在考虑迁移到Git。我们的兴趣在于在分支方面获得更好的能力。简单地说,我们的项目是这样的:

Project1
Project2
SharedCode

这两个项目中的每一个都非常依赖于SharedCode(事实上,它们是不可分割的)。因此,如果我正在使用Project1,我需要能够签出由Project1和SharedCode(总是)组成的存储库。同样,对于Project2,它必须由Project2和SharedCode组成。

顾名思义,SharedCode是共享库,共享项目和参考文件的集合。每个项目都等同于Visual Studio中的解决方案。这意味着每个实际上都是VC#代码项目的集合。关键在于这些单独的VC#项目将引用SharedCode中的内容,例如引用DLL,甚至是SharedCode目录中存在的其他VC#代码项目。

我真正想强调的是结构是我问题中最重要的部分。我不能使用使“链接”代码(即SharedCode)成为特定提交的方法。它必须始终是HEAD(最新发布的代码),就像项目1或2一样。

现在,我知道我可以简单地将每个存储库作为一个单独的存储库并分别检查它们。但是当我想要分支时会发生什么?以下是潜在危险情况的一个例子:

我已经分支了Project1和SharedCode,我已经检查过了。我也检查了Project2,但它没有分支。我开始研究Project2中的某些东西,但是因为Project2使用了来自SharedCode的代码页,所以我可能正在研究一个未分支的Project2和一个分支的SharedCode的混合体。

因此,总而言之,我希望能够在这些对中签出Project1和SharedCode,或Project2和SharedCode。相反,我还必须能够一起提交更改,以便所有代码保持一致。

我有什么选择?您是否有任何类似的需求,或者如何处理这种情况并避免危险情况?

我提前感谢您提供有关构建新Git存储库的帮助。

2 个答案:

答案 0 :(得分:0)

我认为你应该看看

man githookonline manpage

使用githooks,你可以在pull或push之后开始定义脚本,这样你也可以拉动和推送SharedCode。我真的不知道什么是可能的,但也许这会对你有所帮助。

答案 1 :(得分:0)

只是为了结束这个故事,可以说,这就是我们最终做的事情。我们选择创建一个包含Project1,Project2和SharedCode的大型存储库,而不是尝试我们拥有共享存储库的结构。这将意味着更多的东西被复制并被包含在分支/标签中,但最终它最有助于确保每个项目始终具有它所需的SharedCode。