git - 在浅层存储库中获取特定提交失败
问题描述
我有一个子模块存储库的浅层克隆,其中所需的提交位于与 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>
任何想法,当它们有不相关的提交时,如何让浅子模块工作?由于我们有许多具有不同内部结构的子模块,因此对每个子模块进行手动处理是不可行的。
解决方案
如果您控制服务器,请将其设置为允许 fetch-by-hash-ID。
如果不是,请停止使用浅子模块(或使它们足够深,以免出现问题)。差不多就是这样。
推荐阅读
- authentication - 如果我们有多个重定向 uri,那么在 Azure AD 登录后将选择哪一个
- c - 从函数返回时无法接收节点指针的值
- python - 分别记录 Flask 请求:如何按 ID 删除 Python 日志记录处理程序
- c# - Piranha cms 自动在页面类型生成器中添加页面
- microservices - 如何使用 Consul 连接 spring-boot 微服务
- flutter - Flutter 火种交换卡奇怪的更新行为
- amazon-web-services - 您将如何检查拒绝不安全的传输 IAM 策略是否有效?
- php - foreach 给我错误的结果
- c++ - 如何拆分字符串数组,然后将该拆分数组的每个第一个索引与字符进行比较?
- javascript - join() vs JSON.stringify() with Array full of objects