首页/开发/Git 与协作速查/LFS 内容的拉取与按需获取
进阶与大仓实践69 条

LFS 内容的拉取与按需获取

克隆/拉取时 LFS 会自动下载所需对象;可用 lfs.fetchinclude/exclude 或 --include/--exclude 控制范围,避免一次拉取全部历史大文件。

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

LFS 内容的拉取与按需获取是什么

克隆或拉取时 LFS 会自动下载所需对象;用 lfs.fetchinclude / lfs.fetchexclude 配置或 --include/--exclude 参数可以控制拉取范围,避免一次拉全历史大文件。CI 与磁盘紧张的环境尤其需要按需控制。

基本信息

自动克隆/检出时按需下载指针指向的对象
选择性git lfs fetch --include='assets/**' --exclude='media/**'
配置lfs.fetchinclude / lfs.fetchexclude
全量git lfs fetch --all 拉全部历史版本的对象
校验git lfs status 查看对象就位情况
区别fetch 只把对象取到本地缓存;pull 额外更新工作区文件
常见症状文件内容显示为 oid sha256 文本即未拉取

典型使用场景

  • 部分检出:只拉当前分支需要的目录,省磁盘省时间。
  • CI 优化:构建不需要大文件时跳过内容下载。
  • 历史备份:迁移前 fetch --all 把全部对象取回本地。
  • 排查缺失:文件显示为指针文本时补 fetch 对应范围。
  • 带宽控制:限制 include 范围降低高峰期压力。
  • 验证完整性:fetch 后核对对象是否可正常检出。
  • 审计准备:合规检查前把所需范围完整拉齐并校验。
  • 协作排查:他人遇到指针文件时指导其按范围补拉。
  • 发布打包:打包前确认需要的内容范围都已 fetch,避免产物缺文件。

常用示例

常用示例
git lfs fetch --all                    # 取全部历史版本对象(磁盘占用大)
git lfs fetch --include='assets/**'    # 只拉指定范围
git lfs pull                           # 检出工作区需要的对象
git lfs status                         # 查看哪些对象已就位
# 配置示例:git config lfs.fetchinclude 'assets/**'

命令对照

命令范围场景
git lfs pull当前检出需要的对象日常同步
git lfs fetch当前分支的对象只取对象不更新工作区
--include 与 --exclude指定路径范围按需裁剪
--all全部历史版本备份与迁移
CI 只构建代码时可跳过内容下载,但需要大文件的步骤必须确保 fetch 过;跳过后的症状是文件变成指针文本,构建报错位置往往离真实原因较远。;把常用范围命令写进项目 README,减少新人踩坑。

易错点

  • 跳过 LFS 下载后文件变成指针文本:看到形如 oid sha256 的文本先怀疑 LFS 未拉取。,补一次范围拉取后重跑构建。
  • fetch --all 会把全部历史版本的大文件拉下来,磁盘占用远超工作区需要,按范围取舍。,先算清磁盘再决定。
  • include/exclude 模式写错不会报错但结果不符预期,执行后核对 lfs status 输出。,调整后重新 fetch 验证效果。
  • 换机器或换目录后忘记拉取,检出正常但文件内容是指针,先 pull 再排查别的问题。,把补拉步骤写进环境初始化文档。

数据来源与参考

  • Git LFS 官方文档:git-lfs fetch / pull / fetchinclude
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌