我有一个公共库,我想在几个解决方案之间共享,该库存储在不同的 github 存储库中。我们将共享库放在单独的 GitHub 存储库中并创建了 nuget 包,可以将其安装在每个所需的项目/解决方案中。缺点是更改库中的代码涉及几个步骤(更改代码、推送到库存储库、创建 nuget 包、安装包),这很烦人。
我想用git subtree
使用库项目创建子目录,并将其用作我的解决方案中的本地项目,并轻松进行代码更改/测试/调试。
“主要”解决方案的开发人员将有一个选择 - 将库作为二进制 nuget 包或作为子目录中的源项目包含在内。
PROBLEM:当我尝试时git subtree
,我发现一个问题:csproj 文件具有对包文件夹的相对引用,当包含在独立库解决方案中和包含在主解决方案中时,这些文件夹位于不同的级别。
在 MyLib.sln 中,路径为 "..\Packages" ,但在 Main.sln 中,路径应为 "..\..\Packages" 。
主 GitHub 存储库(和 OtherUserOfMyLib GitHub 存储库(是))的结构:
Main.sln
LibSubfolder
-----------------| MyLib.sln
-----------------| MyLibSource
--------------------------| myLib.csproj
--------------------------| myLib code
-----------------| (expected Packages from lib solution)
Packages. (From main solution)
MyLib GitHub 存储库的结构:
MyLib.sln
MyLibSource
--------------| myLib.csproj
--------------| myLib code
Packages. (From lib solution)
我试过git subtree
仅从 Lib 存储库复制 MyLibSource 子目录(这将允许包文件夹的相对位置相同)。不幸的是,我没有找到从另一个存储库复制子目录的方法,该方法支持稍后将更改推回原始存储库。答案使用 git-subtree 添加远程仓库的子目录 https://stackoverflow.com/questions/23937436/add-subdirectory-of-remote-repo-with-git-subtree有几个选项,但所有这些选项似乎都只讨论了单向(拉)同步。
据我所知, git submodule add git subrepo 不支持从源存储库复制子文件夹。
我错过了什么吗?任何人都可以建议,如何从库存储库复制到我的存储库文件夹的子文件夹,这将允许以后双向(拉/推)同步?
我考虑的其他选择是更改包文件夹的位置。但我不确定,选择哪条路径才能使 main.sln 和 MyLib.sln 保持一致。
第三种方法是不要使用 MyLib 存储库中的 MyLib.sln ;仅将存储库用作库源代码的主存储。相反,在主存储库中创建 MyLib.sln 并使用它来构建 NuGet 包。我将能够使用 MyLibSource 项目的 git 子树拉/推内容。 OtherUserOfMyLib 存储库将仅引用子文件夹中的项目,并在需要时调用 git subtree pull/push
Main.sln
MyLib.sln ( locate in Main repository instead of MyLib repository)
LibSubfolder
-----------------| MyLibSource
--------------------------| myLib.csproj
--------------------------| myLib code
Packages
我的问题是尝试哪种方法:
- 花时间尝试找到一种方法来推迟创建的 git 子树
子文件夹?
- 尝试更改包文件夹的位置?
- 保留在存储库之外构建 nuget 包的解决方案
有包裹(第三种方法)吗?
- 还要别的吗?
我看过类似的问题在 .NET 解决方案之间共享公共库的最佳实践 https://stackoverflow.com/questions/8879196/best-practice-to-share-common-libraries-between-solutions-in-net and 但没有找到满意的解决方案。