11

我有以下项目设置:

  • Solution A
    • Project 1(轻量级组件)
    • Project 2(包含很多文件并依赖于Project 1

Solution A是一个单一的git存储库。然后我创建了另一个解决方案,发现我可以重用甚至更新Project 1. 所以我的第二个解决方案可能如下所示:

  • Solution B
    • Project 1(必须分享!)
    • Project 3(取决于Project 1)。

现在我想Project 1成为一个共享组件。也就是说,每次我Project 1从任一解决方案(AB)更改源代码时,我都需要另一个解决方案相应地更新。

也许这与git的子模块功能有关。但是,我能够使用它的唯一方法是将整体指定为. 由于. 我只需要它的一小部分作为子模块。Solution ASolution BSolution A

我知道这在svn中是可能的,并且完全按照我的描述工作:您在svn:externals属性的外部存储库中指定一个目录。

有什么建议吗?或者,我错过了什么?

4

2 回答 2

8

这肯定与子模块有关(请参阅子模块的性质

在您的情况下,理想的解决方案是Project1SolutionAGit repo 中提取:
请参阅如何提取 git 子目录并从中制作子模块?.

但这涉及重写 SolutionA 的历史,如果您已经发布了它并且有人正在从中撤出,那么这就是一个问题。

使用过滤器分支进行提取过程。

要重写存储库,使其看起来好像Project1/ 是其项目根目录,并丢弃所有其他历史记录:

git filter-branch --subdirectory-filter Project1 -- --all

因此,例如,您可以将库子目录转换为它自己的存储库。请注意将选项与修订选项分开,以及--重写所有分支和标签。filter-branch--all

然后声明Project1为子模块SolutionB

cd SolutionB
git submodule add /path/to/Project1 Project1

注意:如果您打算发布您的SolutionB!

git commit -m "Add submodules Project1"
于 2010-02-24T13:35:22.113 回答
0

将项目 1 拆分到自己的存储库中,并使其成为解决方案 A 和解决方案 B 的子模块。

于 2010-02-24T13:34:04.213 回答