嵌套但通信的git仓库

ruarlubt  于 2023-03-11  发布在  Git
关注(0)|答案(1)|浏览(110)

upperleftright作为目录,如下图所示。

upper
├── left
└── right

问题

我如何最好地管理这些git作为本地git仓库

  • upperleftright具有单独的GIT储存库,
  • 来自X1 M6 N1 X和X1 M7 N1 X的储存库的历史可以以某种方式传播到X1 M8 N1 X的储存库,
  • 来自储存库X1 M9 N1 X的历史可以以某种方式传播到X1 M10 N1 X和X1 M11 N1 X的储存库,

后者两者优选地在不改变相应的工作树upperleftright的情况下完成?

示例

为了清楚起见,把upperleftright的git仓库分别称为upper.gitleft.gitright.git(你可以把它们想象成完全在上述目录结构之外的裸仓库)。

  • 我在left上工作并致力于left.git;那么
  • 我以某种方式将历史从left.git传播到upper.git,因此后者知道我所做的所有工作;那么
  • 我在upper上工作,有时在right上工作文件,并提交到upper.git;那么
  • 我以某种方式将历史从upper.git传播到right.git,因此后者知道我对right中的文件所做的所有工作。

想法

一开始我以为我可以通过使用git子树来实现这一点,但是当我尝试使用git subtree -P left add ⟨left.git⟩ masterupper中包含left的仓库时,我--也许并不意外--得到:

fatal: prefix 'left' already exists.

我在stackoverflow上搜索过类似的问题,关于嵌套仓库,但我看不出它们与我的问题有什么关系。我可能对git子树不够了解,也可能我的头脑太简单了。我没有深入研究git子模块;在我看来,他们是为了别的事情。

ecr0jaav

ecr0jaav1#

目前还不清楚这种结构的最终目标是什么,如果您只打算将所有这些repos保持在本地,则不需要子模块。
如果你想让upper repo(而不是folder)包含所有来自内部repos(独立的提交树)的修改,你可以尝试here中的一些答案。
另一方面,我看不出有什么理由这样做.如果你只是想把文件夹的变化保存在不同的存储库中-创建独立的存储库,并这样对待它们.在这种情况下upper.git存储库(而不是文件夹)将忽略内部存储库的所有变化.每个内部存储库将跟踪它自己的文件夹.

相关问题