0

我不确定描述这一点的最佳方式 - 我已经做了一些谷歌搜索,但可以使用。

我目前有一个具有以下内容的解决方案:

Repository 1 ProductProject1 ProductProject2 ProductProject3 SharedCodeProject1 SharedCodeProject2

我目前遇到的问题是,如果任何开发人员想要在 ProductProject1 上工作,他们必须克隆为他们提供 ProductProject1、2 和 3 的整个存储库。

这一直很好,但是直到最近我正在招聘更多的开发人员,我真的希望他们只专注于 3 个产品项目之一并专注于那个。

我很好奇其他人如何处理这种情况?只允许开发人员像我一样克隆整个存储库吗?

我提出的解决方案是...

可能的解决方案 1

设置单个存储库,如下所示:

Repository1 ProductProject1 SharedCodeProject1 SharedCodeProject2

Repository2 ProductProject2 SharedCodeProject1 SharedCodeProject2

Repository3 ProductProject3 SharedCodeProject1 SharedCodeProject2

优点:代码更精简,只将开发人员暴露给他们负责的 ProductProject

缺点:经过深思熟虑后,我意识到每个存储库SharedCodeProject1SharedCodeProject2基本上会有混合版本,而事实上它们应该并且可以在所有存储库中保持相同。

可能的解决方案 2

设置单个存储库,如下所示:

Repository1 ProductProject1

Repository2 ProductProject2

Repository3 ProductProject3

Repository4 SharedCodeProject1 SharedCodeProject2

优点:老实说,我什至不确定这种结构是否可行,因为存储库 1 - 3 中会有大量损坏的引用(除非有一些我不知道的神奇设置) - 但是,理论上奖金是SharedCodeProject1 和 2 是集中式的,因此更新所有开发人员的任何开发人员都可以接收并重用这些更新(特别是对于作为 sharedcodeproject 之一的 DB 层和其他共享代码项目中的业务逻辑)

缺点:在同步之前,所有存储库都不会真正实现重大更改(这有意义吗)

我很难找到完成这项工作的最佳方法。我希望这是有道理的,如果我能澄清一下,请告诉我。

我只是好奇其他公司如何在 github 上构建大型解决方案,就像这样,同时试图将开发人员的访问权限限制在特定项目中。

非常感谢!

4

3 回答 3

1

这一直很好,但是直到最近我正在招聘更多的开发人员,我真的希望他们只专注于 3 个产品项目之一并专注于那个。

我认为你应该在将你的存储库切割成多个存储库之前真正考虑一下......

您不能只使用多个 sln 文件并信任您的开发人员来做正确的事情吗?

有一种运动建议只使用一个存储库,并且可以从中获得一些好处...请参阅 Google 上的“monorepo”(Facebook 和 Google 正在使用它)一个链接:http://danluu。 com/monorepo/

另一种方法确实是创建多个存储库并创建 nuget 包来管理依赖项。

于 2016-12-31T11:16:34.463 回答
0

您应该将所有产品移动到单独的存储库以及公共代码中。公共代码应位于其自己的存储库中,您可以从中复制并创建 Nuget 包。

然后,您可以将该 Nuget 包添加到 Nuget 存储库(可以只是一个网络共享,但内置在 TFS 和 VSTS 中),您可以从中将其添加为对您的产品的引用。

当您更改共享代码时,您将创建一个经过测试的版本并部署到您的包管理解决方案。当您的开发人员打开他们的项目时,他们将被提示更新到最新的包版本。这样,如果您有一个版本并且需要使用 v1.2 的依赖项发布 Product1 以最大限度地降低风险,即使该共享组件的新 v2.0 已经发布。

您可以控制所有存储库的权限,但您应该尝试遵循内部开源政策,每个人都可以看到所有代码并向所有者/保管人提交拉取请求,以获取他们需要的更改/修复。

于 2016-12-29T05:57:07.067 回答
-1

好吧,我的想法是在不同的存储库中执行它,但在一个可用于测试兼容性的主系统上,只需 git clone 它们全部,然后您就可以测试兼容性。Hech 只需编写一个 .sh 文件来在您想要测试时克隆它们。

于 2016-12-29T03:57:35.317 回答