You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移*.fmu文件至Git LFS并清理历史失败,求解决办法

问题分析与解决方案

你的核心问题是:三种工具处理后,仓库objects目录大小未变,说明原*.fmu文件的Blob对象仍被仓库内的某些引用(分支、标签、stash、备份引用等)保留,导致git gc无法回收这些对象。以下是针对性的排查和解决步骤:


第一步:排查所有保留旧Blob的引用

先清理仓库内所有可能留存旧提交的引用:

# 查看所有分支、标签、远程引用
git for-each-ref

# 查看是否有未清理的stash
git stash list

# 检查是否存在BFG/旧版filter-branch生成的备份引用目录
ls -la refs/original/
  • 若有stash,执行git stash clear清空
  • 若存在refs/original/目录,直接删除:rm -rf refs/original/

针对git-filter-repo的修正操作

你之前的命令未覆盖所有分支/标签,导致部分分支的*.fmu文件未被移除。改用以下流程:

# 克隆非裸仓库(mirror克隆不适合filter-repo操作)
git clone https://address.to.MyRepo MyRepo-clean
cd MyRepo-clean

# 处理所有分支、标签、远程引用,彻底移除*.fmu文件
git filter-repo --path-glob '*.fmu' --invert-paths --refs 'refs/heads/*' 'refs/tags/*' 'refs/remotes/*'

# 强制清理历史引用并回收垃圾
git reflog expire --expire=now --all
git gc --prune=now --aggressive

执行完成后,用你之前的Blob统计命令检查,确认*.fmu的Blob已消失。


针对git lfs migrate的修正操作

若要迁移至LFS,需确保命令覆盖所有提交,并彻底清理原Blob:

# 克隆非裸仓库
git clone https://address.to.MyRepo MyRepo-lfs
cd MyRepo-lfs

# 配置LFS追踪*.fmu文件
git lfs track '*.fmu'
git add .gitattributes
git commit -m "Track *.fmu with Git LFS"

# 迁移所有历史中的*.fmu文件(含所有分支、标签),启用verbose查看处理日志
git lfs migrate import --include '*.fmu' --everything --verbose

# 检查原Blob是否已被移除(无输出则说明成功)
git rev-list --objects --all | grep '\.fmu$' | git cat-file --batch-check='%(objecttype) %(objectname)' | grep blob

# 彻底清理垃圾
git reflog expire --expire=now --all
git gc --prune=now --aggressive
git lfs prune --force

若--verbose输出显示部分分支未被处理,需手动添加--refs参数指定这些分支。


针对BFG的修正操作

BFG转换后会在refs/original/留存原提交备份,必须删除才能让GC回收原Blob:

cd MyRepo.git
# 删除BFG生成的原提交备份目录
rm -rf refs/original/
# 强制清理并回收垃圾
git reflog expire --expire=now --all
git gc --prune=now --aggressive
git lfs prune --force

最后验证

操作完成后,执行以下命令确认效果:

# 查看objects目录大小
du -hd1 .git/objects

# 再次检查Blob对象,确认无*.fmu条目
git rev-list --objects --all --missing=print | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | sed -n 's/^blob //p' | grep '\.fmu$'

注意:所有操作完成后,需强制推送到远程仓库(git push --force --all && git push --force --tags),并通知所有协作者重新克隆仓库,避免继续使用旧历史提交。

内容的提问来源于stack exchange,提问作者sdunnim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 18:05:19