首页/开发/Git 与协作速查/在 CI 中使用 LFS
进阶与大仓实践69 条

在 CI 中使用 LFS

CI 有两种取舍:不需要大文件内容时跳过下载(省流量提速),需要时确保 lfs 已安装并完成 fetch,否则检出的是指针文本。

Git 与协作速查开发更新于 2026-10-13

CI 里的 LFS 是什么情况

CI 上使用带 LFS 的仓库有个取舍:作业不需要大文件内容时跳过下载(省流量、提速),需要时确保环境里 LFS 可用并完成拉取。检出默认只取指针文件——如果作业直接读大文件,拿到的是指针文本而不是真实内容,报错往往不直观。

基本信息

跳过内容设 GIT_LFS_SKIP_SMUDGE=1 再克隆或检出
需要内容安装 git-lfs,执行 git lfs install 与 git lfs pull
按路径拉取git lfs pull --include='assets/**'
校验git lfs ls-files 看清单,注意大小是否真实体量
缓存缓存 LFS 对象目录可减少重复下载,缓存键带上属性文件指纹
环境检查git lfs version 确认工具已装且版本符合要求

典型使用场景

  • 纯代码检查作业(lint、单测不涉及大文件):跳过下载提速
  • 构建打包作业:需要真实资源,装 LFS 并拉取后再执行
  • 多作业流水线:把 LFS 拉取收敛成前置步骤或缓存层
  • 排查文件内容是指针文本:确认作业是否安装了 git-lfs 与执行过 pull
  • 缓存策略:按仓库与属性文件指纹隔离 LFS 缓存

常见写法

常见写法
# 只跑代码检查:跳过内容下载
export GIT_LFS_SKIP_SMUDGE=1
git clone --depth 1 https://example.com/app.git
# 需要大文件时
git lfs install --local
git lfs pull --include='assets/**'
git lfs ls-files --size   # 核对真实体量

CI 场景对照

作业类型做法注意
纯代码检查跳过 smudge 下载作业里别读大文件
构建打包安装 LFS 并 pull确认版本与缓存
缓存层缓存 LFS 对象目录缓存键含仓库标识与属性指纹
多数托管平台的检出步骤需要显式开启 LFS 或安装工具;先看平台文档,再在本地复现同样的命令验证;版本固定的自定义镜像最省心。
git lfs ls-files --size 可快速验证:数字接近文件真实大小说明拉取成功,只有指针大小说明仍是指针,补跑一次 git lfs pull 再复验作业。

易错点

  • 跳过下载后作业读大文件:得到指针文本导致解析失败或产出错误产物,报错不直观
  • LFS 缓存互相污染:多仓库共用全局缓存键时可能串对象,按仓库加命名空间
  • 只安装 git-lfs 不执行 pull:检出仍是指针,构建读到的是文本
  • 浅克隆与 LFS 组合:历史对象缺失时拉取范围要明确,必要时按 include 精确拉取
  • 制品归档没验内容:流水线归档若包含 LFS 文件,先确认是真内容再上传,别把指针文本打进发布制品

数据来源与参考

  • Git LFS 官方文档:GIT_LFS_SKIP_SMUDGE 与 CI 集成
  • Git LFS 官方文档:git-lfs pull
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌