我创建了一个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
网址,但没有运气。
答案 0 :(得分:21)
在尝试更新不在索引中的子模块时,我也使用TortoiseGit收到此错误。也就是说,它们存在于.gitmodules
中,但尚未正确添加到存储库中。
解决方案是使用.gitmodules
中指定的路径手动重新添加它们。您可以使用TortoiseGit UI或在命令行上为每个模块运行...
git submodule add <url> <path>
(我意识到这可能不是原版海报的解决方案,但希望它可以帮助其他人用谷歌搜索。)
答案 1 :(得分:4)
这可能是因为您或团队中的某个人的子模块中有未更改的已更改(已提交但未推送到远程服务器)。然后,他们发布了超级项目,引用了子模块中的git提交,这在git服务器上是不存在的。所以git试图提取一个它找不到的特定子模块git提交ID。
如果更改位于您计算机上的其他位置或其他计算机上的存储库中,则会出现这种情况。
要解决此问题,请转到引用该提交的存储库,并将子模块更改发布(推送)到服务器。或者更改子模块以指向不同的提交ID。
答案 2 :(得分:1)
为了将新的子模块放入其他存储库,我认为您需要在开始运行git submodule init
之前运行git submodule update
;这将从.gitmodules
中的.git/config
注册新的子模块。