首页 > 解决方案 > 在浅层存储库中获取特定提交失败

问题描述

我有一个子模块存储库的浅层克隆,其中所需的提交位于与 HEAD 提交无关的分支上。

git submodule update --init --depth 1

这适用于大多数子模块,但是对于 HEAD 与所需提交具有无关历史记录的子模块,它会失败:当 git 尝试获取所需的提交时,它会给出错误: error: Server does not allow request for unadvertised object

没有子模块也会发生同样的错误

git clone --depth 1 <url> prj
cd prj
git fetch origin <hash>
> error: Server does not allow request for unadvertised object

以下工作正常:

git clone <url> prj
cd prj
git checkout <hash>

任何想法,当它们有不相关的提交时,如何让浅子模块工作?由于我们有许多具有不同内部结构的子模块,因此对每个子模块进行手动处理是不可行的。

标签: gitfetchgit-submodulesshallow-clone

解决方案


如果您控制服务器,请将其设置为允许 fetch-by-hash-ID。

如果不是,请停止使用浅子模块(或使它们足够深,以免出现问题)。差不多就是这样。


推荐阅读