为.NET解决方案设置Git存储库

时间:2014-05-01 19:10:23

标签: c# .net git visual-studio projects-and-solutions

我有15个C#项目的解决方案,我正在尝试为它们建立一个高效的git存储库。我应该在该级别上创建存储库还是在解决方案下创建每个项目?

WebServices/
|- WebServices.sln
|- WebService1/
 `- WebService1.csproj
|- WebService2/
 `- WebService2.csproj

该解决方案有一个对../framework/framework.csproj的项目引用,它是一个单独的存储库,所有其他项目都有引用。解决方案下的项目没有任何关联,但它们都使用框架。

我希望框架的任何更改都会传递给项目。

您是否有任何指导我如何以最佳方式实现这一目标?

4 个答案:

答案 0 :(得分:12)

如何设置存储库没有一个答案。这取决于您的具体需求。

您应该问自己的一些问题包括:

  1. 是否所有项目都将单独发布和版本化?
  2. 这些项目是否真的相互独立?
  3. 您的开发团队是如何构建的?个别开发人员是否坚持一个项目?
  4. 您的框架项目是否稳定?
  5. 您的构建过程是否单独构建每个项目?
  6. 假设上述所有问题的答案都是“是”,那么我会这样设置:

    • 继续在自己的存储库中维护框架代码,并使用NuGet将其发布到内部服务器(如ssube的评论中所述)。
    • 为每个项目创建一个单独的存储库,每个存储库都有自己的解决方案文件。

    如果你可以对除#5(可能还有#1)以外的所有人说“是”,那么我会再添加一个存储库,其中包含每个项目的子模块和构建服务器的全局解决方案文件可以使用。如果添加新项目,则必须记住也要更新此存储库!

    如果你必须对#2说“不”,那么只需构建一个存储库。

    如果你不得不对#3说“不”,那么在分离代码和开发人员需要在回购之间切换之间,你必须做出判断。您可以创建一个包含子模块的单独存储库,但如果所有开发人员都使用该存储库,那么您实际上只是在引入新维护时收效甚微。

    如果您的框架不稳定(#4),那么您可能希望将其作为子模块包含在任何这些情况中。我建议一旦它变得稳定,那么你会考虑删除子模块并在那时切换到NuGet。

答案 1 :(得分:1)

我为这种情况所做的是以下内容。请注意,在我的情况下,有2-3个开发人员。

所以我有三件事:

  1. 我想要复制的空项目结构[可选]
  2. 公共图书馆项目
  3. 使用公共库项目的实际最终项目
  4. 1)我只是创建我的脚手架开发目录结构,我在每个人和每个人都放了一个.gitkeep文件,以便让git包含它。通过这种方式,当我想在一台新电脑中设置自己时,我只是克隆了这个,我的空白开发"宇宙"结构体。然后我用我需要的项目填充(git clone)。

    2)公共库项目只是一个普通的回购。

    3)我的最终项目引用公共库项目。有关于它的pron和cons,取决于你的情况,但我得到的是我可以直接从公共库项目或引用它的最终项目更改公共库。在这两种方式中,我都可以获得git中的更改并正常地单独提交。

    在你的情况下,我会有我的空结构,然后做2个单独的克隆。框架项目在正确的位置,然后是整个webservices repo。

    如果您希望为每个Web服务或所有Web服务单独设置一个repo,则由您决定。这取决于你的人数和工作流程。

    另外,请不要忘记.gitignore这里LINK

答案 2 :(得分:1)

如果

  • 你真的想让所有项目都在同一个解决方案中
  • 共同项目“框架”正在积极开发中(以及一些修改 对于一个项目可能打破其他项目...)

我认为你必须将每个WebService作为一个git项目,将他自己的Framework项目副本作为子模块:

WebServices/
|- WebServices.sln
|- WebService1/
 `|-.git  
  |-WebService1.csproj
  |-Framework (as submodule)
|- WebService2/
 `|-.git  
  |-WebService2.csproj\
  |-Framework (as submodule)

这样每个WebService都将使用与之兼容的Framework版本。

(当然你必须知道git子模块工作......你可以阅读例如this,特别是“子模块问题”部分!)

重要:使用此配置,每个部署的Web服务必须使用它正在使用的实际版本引用Framework库!

答案 3 :(得分:0)

取决于"如何独立"你可能会考虑两种选择,为你的每个项目开发。

  • 如果您主要处理整个解决方案 - 为整个解决方案创建一个回购

  • 如果某些项目真的是独立的,为这些项目创建单独的repos并为项目文件创建每个项目的解决方案文件,然后使用git子模块在主解决方案的repo中引用那些repos,使用这些项目。

Git Submodules Tips