GitLab Fork仓库流水线报错:fatal: mismatched algorithms: client sha1; server sha256
解决Git SHA算法不匹配导致的CI流水线失败问题
问题场景
主仓库基于python:3.11镜像的Python单元测试CI流水线运行正常,但在Fork仓库执行时,拉取代码阶段报错:
fatal: mismatched algorithms: client sha1; server sha256
已确认主仓库与Fork仓库的本地Git、仓库及所有提交均使用SHA256算法。
解决方案
1. 检查镜像内Git版本
python:3.11基础镜像自带的Git版本可能偏旧,旧版本Git默认使用仅支持SHA1的Git协议v1,导致与SHA256仓库交互失败。可在流水线中先执行命令确认版本:
git --version
2. 强制Git使用SHA256及协议v2
在CI流水线的before_script阶段添加以下配置,强制Git启用SHA256支持和协议v2:
git config --global protocol.version 2 git config --global core.repositoryFormatVersion 1 git config --global objectFormat sha256
3. 调整CI拉取参数
如果使用GitLab CI,可在.gitlab-ci.yml中添加全局变量,指定拉取时使用协议v2:
variables: GIT_FETCH_EXTRA_FLAGS: "--protocol=2"
4. 验证仓库哈希配置
在流水线中添加以下命令,确认本地仓库和远程仓库的哈希类型是否一致:
# 查看远程仓库地址 git ls-remote --get-url origin # 确认本地仓库当前提交的哈希类型 git cat-file -t HEAD
原因说明
尽管仓库本身配置为SHA256,但旧版本Git在与远程仓库通信时默认使用协议v1,该协议仅支持SHA1哈希验证,因此会与使用SHA256的Fork仓库发生算法不匹配冲突,启用协议v2即可解决该问题。
内容的提问来源于stack exchange,提问作者HumpbackWhale194
相关产品推荐
相关产品推荐

