还有一种 size-pack 看着很高、普通 refs 里却找不到大对象的情况:Git 2.37+ 的 cruft pack 会把暂时不可达的对象连同过期时间一起打包保留。先只读看对象目录里有没有同名的 .mtimes:
git --version
OBJDIR=$(git rev-parse --path-format=absolute --git-path objects)
find "$OBJDIR/pack" -maxdepth 1 -type f -name '*.pack' -printf '%TY-%Tm-%TdT%TH:%TM:%TS %12s %p\n' | sort
find "$OBJDIR/pack" -maxdepth 1 -type f -name '*.mtimes' -printf '%TY-%Tm-%TdT%TH:%TM:%TS %12s %p\n' | sort
git config --show-origin --get gc.cruftPacks
git config --show-origin --get gc.pruneExpire
有 .mtimes 不等于仓库损坏,也不表示对应 pack 可以手工删除;它通常是在按保留窗口保存可恢复对象。可以再用 git fsck --no-reflogs --unreachable --no-progress 核对不可达对象。真要回收时先确认 reflog、stash、未推送提交和团队恢复窗口,再走仓库既有维护流程;完成后用 git fsck --full、git count-objects -vH 和同一对象目录的 du -sh 复查。