GitLab流水线报fatal error in object: unshallow错误解决咨询
问题背景
向GitLab推送代码变更触发CI流水线时执行失败,报错信息如下:
fatal error in object: unshallow <commit-hash>
当前已知条件:
- 无GitLab构建流水线编辑权限,无法修改流水线侧配置
- 从执行日志可知,流水线拉取代码阶段提示
Fetching changes with git depth set to 50 - 初步验证:将
GIT_DEPTH参数从默认值50调整为760后流水线可正常运行,调整逻辑为增大Git克隆深度,将需要unshallow的提交纳入克隆范围,但不确定该方案是否可永久生效。
结论与操作方案
- 错误根因:GitLab CI默认采用浅克隆(shallow clone)策略拉取代码,仅拉取指定深度的最近提交(默认深度为50),当流水线执行过程中需要访问浅克隆截断点之前的提交对象时,就会抛出上述unshallow相关的致命错误。
- 你当前将GIT_DEPTH调整为760的方案无法永久解决问题:随着分支后续提交不断累加,760的深度阈值迟早会被突破,当需要访问的提交落在760条提交的范围之外时,错误会再次复现。
- 无流水线编辑权限时,完全可以通过本地Git操作彻底解决问题,核心逻辑是压缩当前开发分支的提交历史,让分支的所有提交对象都落在CI默认浅克隆的拉取深度范围内,操作步骤如下:
- 先同步远端主分支(通常为main/master分支)的最新代码
- 回到你的开发分支,基于最新的主分支执行交互式变基,将主分支分叉点之后的所有本地提交压缩为1个提交
- 将压缩后的提交强制推送到远端对应分支即可
核心操作命令参考:
# 切换到本地主分支并拉取最新远端代码 git checkout main git pull origin main # 切回你的开发分支 git checkout <your-feature-branch-name> # 基于主分支执行交互式变基,将分叉后所有提交压缩为1个 git rebase -i main # 变基完成后强制推送(操作前请确认当前分支没有其他协作者提交的未同步内容,避免覆盖他人代码) git push -f origin <your-feature-branch-name> - 如果后续你拿到了CI流水线的编辑权限,最稳妥的永久方案是直接关闭浅克隆逻辑,将
GIT_DEPTH参数设置为0,让CI拉取完整的仓库提交历史,从根源上避免提交对象缺失的问题。
内容的提问来源于stack exchange,提问作者aru_sha4
相关产品推荐
相关产品推荐

