首页/开发/Git 与协作速查/把既有大文件迁移进 LFS
进阶与大仓实践69 条

把既有大文件迁移进 LFS

git lfs migrate import 把历史提交中的匹配文件改写为 LFS 指针;先 migrate info 查看候选与体积,再决定是否重写历史。

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

把大文件迁进 LFS 是什么

git lfs migrate import 把历史提交中匹配的文件内容改写为 LFS 指针(真实内容转存 LFS 存储),从而缩小主仓库体积、加快克隆与拉取。它改写的是历史,所有相关提交哈希都会变化,属于高风险重构:先分析、再演练、最后才对主仓库执行,并协调团队同步。

基本信息

前置本机安装 git-lfs,并执行 git lfs install 初始化过滤器
分析git lfs migrate info --everything 查看候选与体积
迁移git lfs migrate import --include='*.psd' --everything
影响历史提交被改写,相关哈希变化,需要团队协调
回退migrate export 可把指针再还原为普通文件

典型使用场景

  • 平台拒绝推送:仓库或单文件超限被拒后,做一次性治理。
  • 克隆太慢:大二进制文件进历史导致新克隆下载量爆炸。
  • 统一规范:团队决定某类文件(设计稿、二进制资源)一律走 LFS。
  • 演练预研:先在临时克隆里评估体积变化与耗时,再决定是否执行。
  • 接手旧仓库:历史里混入构建产物或媒体文件,做批量清理迁移。

迁移流程

迁移流程
git lfs migrate info --everything                       # 第一步:分析候选文件与体积
git lfs migrate import --include='*.psd' --everything   # 改写历史中的匹配文件为 LFS 指针
git lfs ls-files | head                                 # 确认指针已建立
git push --force-with-lease --all                       # 强推全部分支(先与团队约好时间)
git push --force-with-lease --tags                      # 标签同步强推
# 换一台机器重新克隆,验证大文件可完整拉取

子命令对照

命令作用备注
migrate info只分析不下手输出候选清单与体积
migrate import改写为 LFS 指针改写历史,哈希变化
migrate export指针还原为普通文件用于退出 LFS 或回退
--everything覆盖所有本地引用含未检出分支
--include/--exclude按模式选择文件每次聚焦一类文件
历史改写必须团队协调:所有克隆要重新拉取或按迁移文档处理,外部链接与第三方 fork 里的旧提交哈希会失效。

易错点

  • 直接在主仓库上跑 import,没有先演练与备份;先在克隆副本演练,记录体积与耗时再决定。
  • 迁移后不强推或没通知团队,新旧历史并存互相覆盖;提供迁移说明,必要时要求所有人重新克隆。
  • 忘记把 LFS 对象推全:按 --all 与 --tags 推完后,务必在另一台机器克隆验证文件可恢复。
  • 外部系统(CI 缓存、镜像、第三方 fork)仍引用旧哈希;迁移后逐一核对并更新配置。
  • 把构建产物也一并 import,LFS 存储被无价值文件占满;迁移前用 info 复核候选列表再剪裁。

数据来源与参考

  • Git LFS 官方文档:git-lfs migrate(import/info)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌