2016-12-29 129 views
0

我不确定描述此问题的最佳方式 - 我已经完成了一些Google搜索,但可用。Github解决方案文件的依赖关系

我现在有具有以下解决方案:

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是集中式的,所以任何更新所有开发者的开发者都会收到并且可以重用这些更新(具体到数据库层,这是共享代码项目和其他共享代码项目中的业务逻辑之一)

缺点:(这是否有道理)

实施不会真正实现跨越所有存储库,直到同步重大更改

我正在努力弄清楚完成这项工作的最佳方法。我希望这是有道理的,请让我知道,如果我能澄清。

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

非常感谢!

回答

-1

那么这里是我的想法做它在不同的回购协议,但可以用于测试兼容性只是git克隆它们,然后你可以测试兼容性的主系统。 Hech只需编写一个.sh文件即可在您想测试时克隆它们。

0

您应该将所有产品移至不同的存储库以及您的通用代码。通用代码应该在它自己的repo中,从中复制并创建一个Nuget包。

然后,您可以将Nuget包添加到Nuget存储库(可以是网络共享,但内置到TFS和VSTS中),您可以将其添加为您的产品的参考。

当您更改共享代码时,您将创建一个测试版本并部署到您的软件包管理解决方案。当您的开发人员打开他们的项目时,系统会提示他们更新到最新的软件包版本。这样,如果你有一个版本,并且需要发布一个依赖关系v1.2的产品1,以尽可能降低风险,即使该共享组件的新版本v2.0已经出货。

您可以控制所有回购的权限,但应该尝试遵循内部开放源代码策略,其中每个人都可以看到所有代码,并向所有者/保管人提交他们需要的更改/修复程序的请求。

+0

我唯一担心的问题是共享代码几乎每天都会被上述项目修改。似乎要分开管理整个流程会非常麻烦。 – 99823

+0

这听起来像是你需要掌握的东西。你有一个被认为是反模式的紧密耦合问题。你应该促进松耦合... –

+0

我不知道该怎么做......我们有一个针对我们数据库的项目和一个针对我们服务的项目,这两个项目在我们的产品中重复使用。对于从事产品工作的人来说,为服务项目添加该产品的服务功能非常普遍。通常还有其他的事情吗?我认为这将被认为是最佳做法。 – 99823

1

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

我想你应该认真考虑,削减你的资料库中多个存储库之前...

你就不能使用多个SLN文件,并把一些信任你developpers做正确的事?

有一个动作,建议只使用一个存储库,并有好的东西采取它... 谷歌(Facebook和谷歌正在使用它)上的'monorepo'参见 其中一个链接: http://danluu.com/monorepo/

另一种方式的确是创建多个存储库并创建nuget包来管理依赖关系。

+0

经过许多资源,我开始意识到,具有多个解决方案文件的单个存储库设置是一种方式。 – 99823