(为什么)git super-repository 除了指向子模块的指针之外还保留其他内容?
(Why) does git super-repository keep anything more than a pointer to submodules?
使用 git 子模块时,为什么会添加一个 project/.git/modules/<submodule name>/
文件夹,其中包含似乎是(子模块的副本?)存储库的内容?
更新
好的,这就是我的感觉(在我的情况下,一切都是本地的,我表示它不必在的地方)
absolute/path/to/actual/<submodule>/.git
~= (本地)远程仓库
project/.git/modules/<submodule>/
~= 本地克隆仓库
project/path/to/<submodule>/
= 本地签出 本地克隆存储库
对 local checkout 的更改与 local clone repo 不同,后者可以(但不是自动)与 (本地)远程仓库.*
(本地)远程仓库 被检入 /absolute/path/to/actual/<submodule>
(或其他任何地方)的事实只是偶然的。它与 project
之间没有(直接)关系。
*:即更新 (local) remote repo 这样任何 project X
都可以合并对 project
.
中的子模块所做的可互用更改
意味着对于 本地克隆回购 我可以有许多未推送的更改(分支等)并且是 project
的本地更改。其中一些我永远不想推送到 (本地) 远程仓库,因为它们不能在项目之间互用。
这是因为 git 子模块是一种将另一个 git 存储库的工作目录嵌入到您项目的工作目录中的方法,具有 git 所有代码管理功能规定。
路径 project/.git/modules/<submodule name>
是子模块的实际 git 存储库(相当于 "standard" 克隆的 project/.git
),而 project/path/to/<submodule name>
是工作目录。这样做的原因是它允许您将 project/path/to/<submodule name>
的内容作为完整的 git 存储库进行操作(您可以签出新的提交,而不必以某种方式从其他位置复制它们)。
子模块,本质上,从项目的根目录中按照 git clone --separate-git-dir=.git/modules/<submodule name> <submodule origin> path/to/<submodule name>
的方式进行克隆。
值得注意的是,这仅存在于存储库的克隆 (non-bare) 版本中。实际存储库本身 确实 仅包含对子模块(路径、来源和提交)的引用。
使用 git 子模块时,为什么会添加一个 project/.git/modules/<submodule name>/
文件夹,其中包含似乎是(子模块的副本?)存储库的内容?
更新
好的,这就是我的感觉(在我的情况下,一切都是本地的,我表示它不必在的地方)
absolute/path/to/actual/<submodule>/.git
~= (本地)远程仓库
project/.git/modules/<submodule>/
~= 本地克隆仓库
project/path/to/<submodule>/
= 本地签出 本地克隆存储库
对 local checkout 的更改与 local clone repo 不同,后者可以(但不是自动)与 (本地)远程仓库.*
(本地)远程仓库 被检入 /absolute/path/to/actual/<submodule>
(或其他任何地方)的事实只是偶然的。它与 project
之间没有(直接)关系。
*:即更新 (local) remote repo 这样任何 project X
都可以合并对 project
.
意味着对于 本地克隆回购 我可以有许多未推送的更改(分支等)并且是 project
的本地更改。其中一些我永远不想推送到 (本地) 远程仓库,因为它们不能在项目之间互用。
这是因为 git 子模块是一种将另一个 git 存储库的工作目录嵌入到您项目的工作目录中的方法,具有 git 所有代码管理功能规定。
路径 project/.git/modules/<submodule name>
是子模块的实际 git 存储库(相当于 "standard" 克隆的 project/.git
),而 project/path/to/<submodule name>
是工作目录。这样做的原因是它允许您将 project/path/to/<submodule name>
的内容作为完整的 git 存储库进行操作(您可以签出新的提交,而不必以某种方式从其他位置复制它们)。
子模块,本质上,从项目的根目录中按照 git clone --separate-git-dir=.git/modules/<submodule name> <submodule origin> path/to/<submodule name>
的方式进行克隆。
值得注意的是,这仅存在于存储库的克隆 (non-bare) 版本中。实际存储库本身 确实 仅包含对子模块(路径、来源和提交)的引用。