我有一个git存储库,它有一个数字分支(例如branch1,branch2)。其中一个分支包含一个子模块(例如子模块1)。
branch1的直接结构示例:
$ ls
subdir1/
subdir2/
file1.txt
file2.txt
branch2(包含子模块)的直接结构示例:
$ ls
submodule1/
file1.txt
当我从branch2切换到branch1($ git checkout branch1
)时,来自branch2的子模块出现在branch1中:
$ ls
subdir1/
subdir2/
submodule1/
file1.txt
file2.txt
这是怎么回事?为什么会发生这种情况?
答案 0 :(得分:0)
子模块存在于项目级别,它们不是(必然)文件。子模块本身在git项目的根目录.gitmodules
中的文件中定义。此文件概述了存储库的本地路径和远程URL。
因此,从概念上讲,子模块不存在于“分支”中,它们只是存储库本身的一部分。你也没有在任何时候“检入”子模块文件本身,所以git实际上并没有以任何方式管理它们。它实际上是“忽略”它们到一定程度,当你切换分支时,它只是“绕过”这些文件,就像新文件是未提交的而且还没有版本控制。