git子模块更新失败,一台机器上出错,但在另一台机器上运行

时间:2012-01-13 00:06:27

标签: git git-submodules

我创建了一个git子模块并将其推送到我们的主存储库中。这很好用,我可以通过浏览器看到存储库中的子模块。

为了测试它工作正常,我试图让源代码是一个新的构建树。 首先我运行git submodule init然后git submodule update <submodule-name>

此操作失败并显示错误:

error: pathspec 'x/mypkg' did not match any file(s) known to git. Did you forget to 'git add'

我尝试在子模块中添加.gitmodules网址,但没有运气。

3 个答案:

答案 0 :(得分:21)

在尝试更新不在索引中的子模块时,我也使用TortoiseGit收到此错误。也就是说,它们存在于.gitmodules中,但尚未正确添加到存储库中。

解决方案是使用.gitmodules中指定的路径手动重新添加它们。您可以使用TortoiseGit UI或在命令行上为每个模块运行...

git submodule add <url> <path>

Re-adding a git submodule

(我意识到这可能不是原版海报的解决方案,但希望它可以帮助其他人用谷歌搜索。)

答案 1 :(得分:4)

这可能是因为您或团队中的某个人的子模块中有未更改的已更改(已提交但未推送到远程服务器)。然后,他们发布了超级项目,引用了子模块中的git提交,这在git服务器上是不存在的。所以git试图提取一个它找不到的特定子模块git提交ID。

如果更改位于您计算机上的其他位置或其他计算机上的存储库中,则会出现这种情况。

要解决此问题,请转到引用该提交的存储库,并将子模块更改发布(推送)到服务器。或者更改子模块以指向不同的提交ID。

答案 2 :(得分:1)

为了将新的子模块放入其他存储库,我认为您需要在开始运行git submodule init之前运行git submodule update;这将从.gitmodules中的.git/config注册新的子模块。