如果我在mac端做“ git submodule init
”和“ git submodule update
”,为什么我还需要在linux端做呢?
这两个子模块命令用于本地存储库(您刚刚克隆的一个)。
git submodule init
初始化您的本地配置文件,并且
git submodule update
从该项目中获取所有数据并检查您的父 repo 中列出的适当提交。
在一个本地存储库中执行此操作对任何其他克隆的存储库(例如 Linux 上的那个,从 Mac 上的存储库克隆)都没有副作用。
您需要为您的第二个本地存储库(Linux 服务器本地)再次执行这些命令以获取所有数据。
注意:确保你做了一个简单的git clone
,而不是一个git clone --reference
.
另外:确保您的子模块没有被完整路径引用(取决于您的 git 版本):请参阅此线程:
您所说的“最后一次更新”是什么?v1.7.8 为子模块引入了单独的 git dir,并使用了绝对路径。
此绝对路径已更改为此补丁集中的相对路径,该补丁集中存在于 v1.7.10-rc1 中。
从最近开始,一个名为的子模块<name>
的 git 目录位于超级项目的.git/modules/<name>
目录中,而工作树包含一个指向那里的 gitfile。
当子模块的 git 目录因为在 clone 命令中找不到而需要克隆时,.git/modules/<name>
会在 gitfile 中写入一个绝对路径。当不需要克隆时,git-submodule.sh
脚本将通过将相对路径写入gitfile
.
这是不一致的,因为行为取决于之前已克隆到.git/modules of the superproject
.
这里最好使用相对路径,因为它允许在不使 gitfile 无效的情况下移动超级项目。
我们通过始终将相对路径写入 来做到这一点gitfile
,这会覆盖克隆命令可能已经写入那里的绝对路径。