为 .NET 解决方案设置 Git 存储库
本文关键字:存储 Git 设置 NET 解决方案 | 更新日期: 2023-09-27 18:01:17
我有一个包含 15 个 C# 项目的解决方案,我正在尝试为它们建立一个高效的 git 存储库。我应该在该级别还是为解决方案下的每个项目创建一个存储库?
WebServices/
|- WebServices.sln
|- WebService1/
`- WebService1.csproj
|- WebService2/
`- WebService2.csproj
该解决方案具有对../framework/framework.csproj
的项目引用,这是一个单独的存储库,所有其他项目都有引用。解决方案下的项目没有以任何方式链接,但它们都使用该框架。
我希望对框架的任何更改都将传递给项目。
你有什么指导我如何以最好的方式实现这一目标吗?
关于如何设置存储库,没有一个答案。 这取决于您的特定需求。
您应该问自己的一些问题包括:
- 是否所有项目都将单独发布和版本控制?
- 这些项目真的相互独立吗?
- 您的开发团队是如何构建的? 单个开发人员是否坚持单个项目?
- 您的框架项目是否稳定?
- 生成过程是否单独生成每个项目?
假设上述所有问题的答案都是"是",那么我会这样设置它:
- 继续在其自己的存储库中维护框架代码,并使用 NuGet 将其发布到内部服务器(如 ssube 的评论中所建议的那样(。
- 为每个项目创建一个单独的存储库,每个项目都有自己的解决方案文件。
如果您可以对上面 #5(可能还有 #1(以外的所有内容说"是",那么我会再添加一个存储库,该存储库由每个单独项目的子模块和构建服务器可以使用的全局解决方案文件组成。 如果你添加一个新项目,你必须记住还要更新这个仓库!
如果你必须对#2说"不",那么只需建立一个存储库。
如果你必须对#3说"不",那么你将不得不在代码分离和开发人员需要在存储库之间切换之间做出判断。 您可以创建一个包含子模块的单独存储库,但是如果您的所有开发人员最终都使用该存储库,那么您实际上只是引入了新的维护,几乎没有收获。
如果您的框架不稳定 ,那么您可能需要在任何这些情况下将其作为子模块包含在内。 我建议在它变得稳定后,考虑删除子模块并在那时切换到 NuGet。
我为这种情况所做的如下。请注意,在我的情况下,有 2-3 名开发人员。
所以我有 3 件事:
- 我想复制的空项目结构 [可选]
- 公共图书馆项目
- 使用公共库项目的实际最终项目
1(我只是创建了我的脚手架开发目录结构,并在每个人中放置了一个.gitkeep
文件,以便git包含它。这样,当我想在新PC中设置自己时,我只需克隆它,我就有了空的开发"宇宙"结构。然后我用我需要的项目填充(git clone(。
2(公共库项目只是一个普通的存储库。
3( 我的最终项目引用了公共库项目。它有优点和缺点,取决于您的情况,但我的收获是我可以直接从公共库项目或引用它的最终项目中更改公共库。在这两种方式中,我都会在 git 中进行更改并正常和单独提交。
在您的情况下,我将拥有空结构,然后执行 2 个单独的克隆。框架项目位于正确的位置,然后是整个 Web 服务存储库。
如果要为每个 Web 服务或为所有 Web 服务提供一个单独的存储库,则由你决定。这取决于您的人数和工作流程。
也不要忘记一个适当的.gitignore
在这里: 链接
if
- 您确实希望将所有项目放在同一个解决方案中
- 共同项目"框架"正在积极开发中(并进行一些修改因为一个项目可能会破坏其他项目...
我认为您必须将每个 Web 服务作为一个 git 项目,并将他自己的框架项目副本作为子模块:
WebServices/
|- WebServices.sln
|- WebService1/
`|-.git
|-WebService1.csproj
|-Framework (as submodule)
|- WebService2/
`|-.git
|-WebService2.csproj'
|-Framework (as submodule)
这样,每个 Web 服务都将使用与之兼容的框架版本。
(当然你必须知道 git 子模块的工作原理......例如,您可以阅读此内容,特别是"子模块的问题"部分!
重要提示:使用此配置,每个部署的 Web 服务都必须使用它使用的实际版本引用框架库!
根据每个项目的"独立性"开发,您可能会考虑两个选项。
-
如果您主要处理整个解决方案 - 为整个解决方案创建一个存储库
-
如果某些项目确实是独立的,请为这些项目创建单独的存储库,并为项目文件之外的每个项目创建解决方案文件,然后使用 Git 子模块在主解决方案的存储库中引用使用这些项目的这些存储库。
Git 子模块提示