You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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默认浅克隆的拉取深度范围内,操作步骤如下:
    1. 先同步远端主分支(通常为main/master分支)的最新代码
    2. 回到你的开发分支,基于最新的主分支执行交互式变基,将主分支分叉点之后的所有本地提交压缩为1个提交
    3. 将压缩后的提交强制推送到远端对应分支即可
      核心操作命令参考:
    # 切换到本地主分支并拉取最新远端代码
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:55:05