Azure Pipelines开启LFS的Checkout步骤出现Smudge下载错误
针对发布分支执行LFS拉取时出现的batch response: Expected json type, got: "text/plain; charset=utf-8"错误,结合master分支流水线正常的情况,可从以下方向排查:
检查分支LFS追踪规则差异
对比发布分支与master分支的.gitattributes文件,确认目标DLL对应的LFS追踪规则(如*.dll filter=lfs diff=lfs merge=lfs -text)是否一致。若发布分支的规则被误修改、删除,会导致LFS无法正确识别该文件。验证LFS对象及指针文件状态
在本地克隆发布分支,执行以下命令检查:# 查看文件是否被LFS追踪 git lfs ls-files # 尝试拉取所有LFS对象 git lfs fetch --all若本地也出现相同错误,说明仓库内的LFS指针文件损坏或对象本身存在异常,需重新提交正确的LFS指针或修复对象存储。
排查流水线权限差异
确认发布分支流水线使用的服务账号,是否拥有Azure DevOps项目中Git LFS对象的读取权限。可前往项目设置→权限→服务账号,检查该账号是否被授予“读取LFS对象”权限,而master分支流水线的账号权限配置正常。排查代理或网络拦截问题
部分代理服务器可能会篡改LFS请求的响应格式,将JSON转换为text/plain。可尝试:- 切换流水线使用的代理池,避开可能存在拦截的代理
- 在Checkout步骤前添加命令,强制指定LFS服务器地址:
git config --global lfs.url https://dev.azure.com/[你的组织]/[你的项目]/_git/[仓库名].git/info/lfs
检查Git LFS版本兼容性
对比两个流水线代理机器上的Git LFS版本,执行git lfs version查看。若发布分支流水线的LFS版本过低,可能存在与Azure DevOps LFS服务的兼容性问题,升级至最新稳定版本即可。确认指针文件未被误替换
检查发布分支中目标DLL的内容,确认其是LFS指针文件(格式为包含oid sha256:和size:的文本内容),而非实际的二进制DLL文件。若指针文件被误替换为真实二进制文件,会触发Smudge错误。
内容的提问来源于stack exchange,提问作者Yash Dutt

