You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#解决方案中实现多项目共享单个Git子模块副本?

在Git(GitHub)中实现SVN externals风格的同级依赖共享(Windows+Visual Studio环境)

场景与SVN下的现有方案

我们有多个C#项目,依赖多款共用C#类库,类库自身也存在依赖关系:比如应用A依赖类库X、Y,X和Y又都依赖类库Z;应用B、C、D也可能依赖X、Y、Z中的部分。

在Subversion(SVN)中这个场景处理起来很顺畅:

  • 每个可复用类库对应独立仓库,分支根目录存放Visual Studio解决方案文件,各类项目(类库、测试等)在根目录下有独立文件夹。
  • 类库若依赖其他仓库的类库,通过SVN externals将依赖类库的文件夹引入同级目录;使用类库的程序也在分支根目录通过SVN externals引入所需类库文件夹,解决方案仍放在根目录。
  • 只需检出应用或类库的某分支,就能自动获取自身及所有依赖项目,可直接构建;且每个外部引用绑定特定版本,类库更新不会影响依赖项目的构建。

举个例子:

  • 检出应用A的分支后,工作副本包含A的解决方案文件、A项目文件夹,以及X、Y、Z类库项目文件夹,可直接构建。
  • 检出类库X的分支后,工作副本包含X的解决方案、X项目及Z项目文件夹,同样可直接构建。

需求与当前Git submodule的问题

现在需要在Git(托管于GitHub)、Windows+Visual Studio环境下实现上述效果。

我们了解Git submodule,但默认用法无法满足需求:当应用(或类库)仓库包含多个子模块,且这些子模块依赖同一公共子模块时,克隆后的工作副本会出现嵌套重复的依赖。

默认submodule生成的结构:

- A (solution)
|- A (project)
 |- X (project)
   |- Z (project)
 |- Y (project)
   |- Z (project)

(X、Y各包含独立的Z副本)

我们期望的结构:

- A (solution)
|- A (project)
|- X (project)
|- Y (project)
|- Z (project)

(每个依赖仅存一份,所有项目文件夹同级)

要求与疑问

  • 优先使用所有客户端支持的标准Git特性,仅特定Windows客户端支持的方案也可接受。
  • 强烈排斥克隆后执行脚本创建链接等方案,理想状态下克隆操作可一步完成所有文件的正确部署(源代码及项目文件直接在工作副本中,而非NuGet包形式)。

由于之前查阅的相关问题多较陈旧,想了解Git近年更新是否提供了更优雅的解决方案?

内容的提问来源于stack exchange,提问作者reirab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 19:10:08