我正在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
repo刚刚下载到构建运行程序,所以它是最新的,为什么git diff会在这里返回一个坏对象?
如果提交是"旧的";它可能会从克隆中丢失,因为Gitlab默认使用深度为20的浅克隆。
这就是您在作业日志中看到以下消息的原因:
获取git深度设置为20的更改…
可能的解决方案:
- 使用web界面为您的项目增加此值(或禁用浅层克隆(
- 从
.gitlab-ci.yml
重写变量GIT_DEPTH
- 在回购的
.gitlab-ci.yml
脚本中使用标准克隆手动重新克隆回购 - 停止依赖";旧的";散列
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
它帮助了我!