我有一个git回购,它有另一个submodule依赖项。在我的项目的根目录( .git、.gitsubmodules等)中,我调用了
git submodule update以下消息失败:
获取子模块路径'src/framework',但它不包含cc8c38e9d853491c672452d8dbced4666fc73ec8。直接获取提交失败。
其中src/framework是我的项目(PROJECT_ROOT/src/framework)的子目录,应该是第三方回购的地方。给定的提交散列是有效的。
我也尝试过git clone --recursive <my-repo>,但也失败了。
我的.gitmodules的内容是
[submodule "src/framework"]
        path = src/framework
        url = git@gitlab-blah-internal.de:gh/framework.git此外,我还必须注意以下重要事实:由于framework回购系统最近的更新,我的代码中断了,因此我真的需要检索它的特定版本,在那里一切正常。
发布于 2017-02-23 20:29:53
是的,我可以在我的网页浏览器中跟踪链接(使用GitLab)。
但是,你能克隆那个回购吗?包括提交吗?
GitLab有限制访问的权限级别,因此确保使用正确的用户执行git克隆命令,并在所述user home directory/.ssh中使用ssh键执行。
如果您不能自己克隆子模块回购(在本地硬盘驱动器上的任何地方),这将解释错误信息。
问题来自于在我所使用的存储库中将头重新设置为提交之前将其链接为子模块的人。这使得引用无效。我不知道怎么解决这个问题
您可以使用确保子模块跟随一个分支 (例如,在这里,master):
cd /path/to/parent/repo
git config -f .gitmodules submodule.bar1.branch master然后在最后一次获取提交master时更新子模块
git submodule update --remote选项确保它不会使用超级项目的SHA-1记录来更新子模块,而是使用子模块的远程跟踪分支的状态。
这将避免"did not contain cc8c38e9d853491c672452d8dbced4666fc73ec8“错误消息。
--remote开关是我的钥匙。 这对我起了作用: git子模块更新--init --递归--远程
发布于 2019-06-16 17:51:27
在克隆(并接收错误)之后运行此命令解决了我的问题:
git submodule update --force --recursive --init --remote当然,这不是一个好的解决办法。最好是找到并解决潜在的问题,但如果有人匆忙,这是为我工作。
发布于 2020-06-05 14:15:28
我的例子是子模块的url已经改变了,并且它与父回购不同步。我们注意到我们可以克隆父库,并且子程序不会失败地初始化,但是存储库的这个特定实例失败了。
通过以下方式修正:
.gitmodules文件中是否正确git submodule syncgit -C path/to/submodule fetch (如果子模块已经初始化)git submodule update --init [--recursive] path/to/submodule (如果子模块已经完成)https://stackoverflow.com/questions/42417294
复制相似问题