Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重用git存储库的一部分_Git_Version Control_Git Submodules - Fatal编程技术网

重用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"