重用git存储库的一部分
我有以下项目设置:重用git存储库的一部分,git,version-control,git-submodules,Git,Version Control,Git Submodules,我有以下项目设置: 解决方案A 项目1(轻量级组件) 项目2(包含大量文件,取决于项目1) 解决方案A是一个单一的git存储库。然后我创建了另一个解决方案,发现我可以重用甚至更新project1的功能。因此,我的第二个解决方案可能如下所示: 解决方案B 项目1(必须共享!) 项目3(取决于项目1) 现在我希望project1成为一个共享组件。也就是说,每次我从任一解决方案(A或B)更改project1的源代码时,我都需要相应地更新另一个 也许这与git的子模块功能有关。但是,我能
解决方案A
(轻量级组件)项目1
(包含大量文件,取决于项目2
)项目1
解决方案A
是一个单一的git存储库。然后我创建了另一个解决方案,发现我可以重用甚至更新project1
的功能。因此,我的第二个解决方案可能如下所示:
解决方案B
(必须共享!)项目1
(取决于项目3
)项目1
project1
成为一个共享组件。也就是说,每次我从任一解决方案(A
或B
)更改project1
的源代码时,我都需要相应地更新另一个
也许这与git的子模块功能有关。但是,我能够使用它的唯一方法是将整个解决方案A
指定为解决方案B
的子模块。这并不是我理想中想要的,因为解决方案A的规模很大。我只需要它的一小部分就可以成为一个子模块
我知道这在svn中是可能的,并且工作原理与我描述的完全相同:您可以在svn:externals
属性中指定外部存储库中的目录
有什么建议吗?或者,我遗漏了什么?将项目1拆分到自己的存储库中,并将其作为解决方案a和解决方案B的子模块。这肯定与子模块相关(请参阅)
在您的情况下,理想的解决方案是从SolutionA
Git repo:
看
但这涉及到重写解决方案的历史,如果你已经发表了它,如果有人正在退出,这将是一个问题
用于提取过程
要重写存储库,使其看起来好像Project1/
是其项目根目录,并放弃所有其他历史记录:
因此,例如,您可以将库子目录转换为自己的存储库。注意将--
过滤器分支
选项与修订选项分开的--
,以及重写所有分支和标记的--all
然后将Project1
声明为SolutionB
中的子模块:
cd SolutionB
git submodule add /path/to/Project1 Project1
注意:如果您计划发布您的解决方案b
,请不要在此处使用本地URL
cd SolutionB
git submodule add /path/to/Project1 Project1
git commit -m "Add submodules Project1"