把大文件迁进 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 里的旧提交哈希会失效。