为什么git diff会返回'bad object'?

cyej8jka  于 2023-04-28  发布在  Git
关注(0)|答案(2)|浏览(288)

我正在Gitlab服务器上运行一个ci任务。其中一个操作是在生成运行器计算机上调用执行某些更新的exe。
我传递了来自$CI_COMMIT_BEFORE_SHA$CI_COMMIT_SHA的SHA1,代码调用:

git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA

通常它会给我一个在提交中更改的文件名列表,但有时我会得到错误:

fatal: bad object abcd1234
                  ^
                  |-- This is the $CI_COMMIT_SHA

仓库已经下载到构建运行器中,所以它是最新的,为什么git diff会在这里返回一个坏对象?

vmdwslir

vmdwslir1#

如果提交是“旧”的,它可能会从克隆中丢失,因为Gitlab默认使用深度为20的shallow clone
这就是您在作业日志中看到此消息的原因:
当git depth设置为20时,获取会发生变化。..
可能的解决方案:

  • 使用web界面为你的项目增加这个值(或禁用浅克隆)。
  • 覆盖来自.gitlab-ci.yml的变量GIT_DEPTH
  • 使用.gitlab-ci.yml脚本中的标准克隆手动重新克隆存储库
  • 停止依赖“旧”哈希
bkkx9g8r

bkkx9g8r2#

git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME git diff-tree --no-commit-id --name-only -r $CI_COMMIT_BEFORE_SHA -r $CI_COMMIT_SHA
它帮了我!

相关问题