我正在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会在这里返回一个坏对象?
2条答案
按热度按时间vmdwslir1#
如果提交是“旧”的,它可能会从克隆中丢失,因为Gitlab默认使用深度为20的shallow clone。
这就是您在作业日志中看到此消息的原因:
当git depth设置为20时,获取会发生变化。..
可能的解决方案:
.gitlab-ci.yml
的变量GIT_DEPTH
.gitlab-ci.yml
脚本中的标准克隆手动重新克隆存储库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
它帮了我!