PhpStorm - 嵌套的 Git 存储库

问题描述

一个主要的“项目”存储库,下面有 2 个“模块”存储库。目录结构为:

Project (Git)
- File1
- File2
- Modules
--- Module1 (Git)
--- Module2 (Git)

到目前为止,一切似乎都设置得很好(“设置 -> 版本控制”中有 3 个条目)并且每个存储库都可以完成 VCS 操作。

现在,当从像“Module1”这样的模块中提取更改时,我希望这些更改也可以提交到“项目”存储库。

修改“Module1”中的某些内容时相同:我想将此更改提交给“Module1”本身,但也提交给“Project”存储库。

这可能吗?

解决方法

表示嵌套 git 存储库的惯用方式是通过 git submodulegit subtree

  • git submodule 是一项内置功能,允许您将外部树的检出版本作为存储库的一部分进行提交。 Git 将在结帐过程中填充该目录,但嵌套存储库中的文件不会作为外部存储库的一部分保留。对于高级用户或非常大的存储库,这可能是一个不错的选择。
  • git subtree 是一个 script in the git/contrib directory。它管理另一个 repo 到您的 repo 的导入,因此用户和他们的工具不需要知道导入。您的 repo 将增长以包含您作为子树导入的 repo 的整个历史记录。对于较小的或第一方存储库,这可能是一个不错的选择。

截至 2018 年 9 月 PhpStorm supports submodules。 JetBrains IDEA 文档 alludes to them,如对 Work with Git Tool - Submodules with PhpStorm 的 SO 回答中所述。

我不知道对子树的正式支持,它是一个贡献特性而不是核心特性,而且无论如何就 git 而言更像是正常的提交。

另见: