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,减少新人踩坑。