我有一个带有子模块的git repo。主仓库的.gitmodule文件的内容是:
[submodule "wits-mercuryAPI"]
path = wits-mercuryAPI
url = https://github.com/myorganization/wits-mercuryAPI.git
我希望当我发出命令时...
git子模块更新
...它将从.gitmodule文件的url中指定的位置正确克隆子模块。但是,显然,它尝试使用此文件的较旧版本,其中url指向错误的url,因此失败。
对于我一生,我无法弄清楚为什么它会以这种方式运行,或者是什么神奇的隐藏属性告诉该命令访问.gitmodules文件的某些旧版本和不可见版本。
答案 0 :(得分:0)
.gitmodules
文件的内容仅在首次创建子模块Git存储库时使用。如果子模块存储库已经存在,Git只会继续使用现有克隆。
根据您使用的特定Git版本,子模块存储库本身可以位于超级项目的.git
目录下的.git/modules/
下,或者位于(较旧的Git版本)子模块本身。但是,无论哪种情况,如果子模块URL都已更改,则有两个选项:
.git/modules
条目)并重新初始化;或git config
更新此特定克隆,例如git config remote.origin.url <new-url>
或git config --edit
在配置上打开编辑器。答案 1 :(得分:0)
好,我知道了。尽管我之所以没有提及它是因为我认为它不相关,但我在自己的问题中描述的“ repo”(简称为“ B”)本身是另一个更高级别的父存储库的子模块(我们称之为“ A”)。最后,我们将原始问题中描述的子模块称为“ C”。因此,依存关系为A-> B-> C。
发生了什么事: 1.我更新了B中的.gitmodules,以指向C的新正确URL,并将更改推送到master。 2.我错误地假设A会在执行以下操作时自动获取此更改:`git clone --recurse。 3.相反,A“记住”它指向的B版本,使用不正确的URL指向C的子模块版本。
此修复程序在这里:https://gist.github.com/ryannealmes/aa4eed8b222239c9e207