在解决方案和源代码管理之间共享项目
Sharing Projects between solutions & source control
这可能是一个非常愚蠢的问题,如果是请指出。但我只是想提高我对为多人和具有某些共享部分的多个项目构建源代码控制存储库的最佳方法的知识。简而言之,我使用许多截然不同的代码库,这些代码库具有共享库的某些位,这些位在我们公司使用的所有实现(日志记录、邮件发送等)中都很常见。
我要问的具体情况是,如果我在一个存储库中有客户 A 项目,在第二个存储库中有客户 B 的项目,那么在第三个存储库中有一组 'tools' 什么是最好的共享方式代码并仍然将存储库分开?
在理想情况下,我们希望能够在 'tools' 的代码中打开客户 A 的项目和 see/edit/check,在客户 B 的代码中也是如此。目前,我通过 Visual Studio 运行 的第二个实例并在进行更改时手动复制和更新 DLLS 来管理此问题,但我觉得必须有更好的方法。
提前致谢!
一言以蔽之:NuGet。
您应该做的是将任何共享组件转换为 NuGet 包,这些包将发布到 NuGet 提要,并由需要它们的任何项目引用。 TFS 和 VSTS 的现代版本都具有本机包管理提要(作为扩展提供)。但是,包管理提要可以像网络上某处的文件共享一样简单。
In an ideal world we want to be able to open Client A's project and see/edit/check in the code of the 'tools' and the same in Client B's.
您可以通过一个解决方案来实现这一点。我知道您提到您将代码保存在 3 个存储库中,但也许这不是必需的。
拥有单一解决方案意味着如果您更改 'tools' 中的代码,您会立即看到对两个客户端的影响(并且可以 运行 对两个客户端进行测试以确认更改没有中断A 或 B.
使用单一解决方案,您还可以在一个地方看到对所有文件的更改,从而减少忘记签入某些内容的可能性。
最后,您可以将3合而为一,直到它工具稳定的代码然后发布(例如通过NuGet)。
我认为应该根据工具的大小以及工具中代码更改的频率来决定工具的 NuGet 包还是单一解决方案。
其他选项:
- 复制工具中的代码并在 A 和 B 存储库中都有源代码
- 将一些代码从工具移到 A 和 B,将一些代码留在工具中并创建一个 NuGet - 如果新工具不经常更改,这可能会起作用
这可能是一个非常愚蠢的问题,如果是请指出。但我只是想提高我对为多人和具有某些共享部分的多个项目构建源代码控制存储库的最佳方法的知识。简而言之,我使用许多截然不同的代码库,这些代码库具有共享库的某些位,这些位在我们公司使用的所有实现(日志记录、邮件发送等)中都很常见。
我要问的具体情况是,如果我在一个存储库中有客户 A 项目,在第二个存储库中有客户 B 的项目,那么在第三个存储库中有一组 'tools' 什么是最好的共享方式代码并仍然将存储库分开?
在理想情况下,我们希望能够在 'tools' 的代码中打开客户 A 的项目和 see/edit/check,在客户 B 的代码中也是如此。目前,我通过 Visual Studio 运行 的第二个实例并在进行更改时手动复制和更新 DLLS 来管理此问题,但我觉得必须有更好的方法。
提前致谢!
一言以蔽之:NuGet。
您应该做的是将任何共享组件转换为 NuGet 包,这些包将发布到 NuGet 提要,并由需要它们的任何项目引用。 TFS 和 VSTS 的现代版本都具有本机包管理提要(作为扩展提供)。但是,包管理提要可以像网络上某处的文件共享一样简单。
In an ideal world we want to be able to open Client A's project and see/edit/check in the code of the 'tools' and the same in Client B's.
您可以通过一个解决方案来实现这一点。我知道您提到您将代码保存在 3 个存储库中,但也许这不是必需的。
拥有单一解决方案意味着如果您更改 'tools' 中的代码,您会立即看到对两个客户端的影响(并且可以 运行 对两个客户端进行测试以确认更改没有中断A 或 B.
使用单一解决方案,您还可以在一个地方看到对所有文件的更改,从而减少忘记签入某些内容的可能性。
最后,您可以将3合而为一,直到它工具稳定的代码然后发布(例如通过NuGet)。
我认为应该根据工具的大小以及工具中代码更改的频率来决定工具的 NuGet 包还是单一解决方案。
其他选项:
- 复制工具中的代码并在 A 和 B 存储库中都有源代码
- 将一些代码从工具移到 A 和 B,将一些代码留在工具中并创建一个 NuGet - 如果新工具不经常更改,这可能会起作用