1

我看过很多类似的问答,所以我会为看似重复的问题提前道歉。但是我已经阅读了所有我能找到的东西(在这里和一般的网络上),但我仍然没有答案。

我们目前使用 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 存储库方面提供的帮助。

4

2 回答 2

0

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

于 2013-04-02T16:14:31.563 回答
0

我想你应该看看

man githook在线手册页

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

于 2013-03-26T13:57:58.993 回答