环境:
AI-Sphere-Butler
问题描述:
Github更新本地仓库到远程总是失败文件过大,如何解决。
解决方案:
问题核心在于 历史提交中仍然存在未被 LFS 正确追踪的大文件。
终极解决方案 (必须按顺序执行)
第一步:修正路径匹配问题
# 进入项目根目录后执行
# 删除现有错误的 .gitattributes
rm .gitattributes
# 重建正确的匹配规则(关键:路径必须与仓库实际结构一致)
echo "wav2lip/face_detection/detection/sfd/s3fd.pth filter=lfs diff=lfs merge=lfs -text" > .gitattributes
echo "wav2lip/models/*.pth filter=lfs diff=lfs merge=lfs -text" >> .gitattributes
第二步:彻底清理 Git 历史中的大文件
# 安装必要工具
pip install git-filter-repo
# 强制删除所有提交中的 .pth 文件(包括子目录)
git filter-repo --path-glob '*.pth' --invert-paths --force
# 清理残留引用
git reflog expire --expire=now --all
git gc --prune=now --aggressive
第三步:重新关联 LFS 并提交
# 确保 LFS 已安装
git lfs install
# 重新标记 LFS 文件
git lfs track "wav2lip/models/*.pth"
git lfs track "wav2lip/face_detection/detection/sfd/s3fd.pth"
# 强制重新添加所有文件
git add --force .
git commit -m "Rebuild repository with LFS tracking"
第四步:强制推送(彻底覆盖远程)
# 再次添加远程仓库
git remote add origin https://github.com/latiaoge/AI-Sphere-Butler.git
# 先推送 LFS 对象
git lfs push origin metahuman-stream --all
# 再强制推送代码库
git push origin metahuman-stream --force
关键注意事项
-
路径一致性:
- 确保
.gitattributes
中的路径与仓库实际结构完全匹配,如果wav2lip
是仓库根目录的子目录,则无需添加metahuman-stream/
前缀。
- 确保
-
历史清理验证:
# 检查是否已清除历史大文件 git log --stat | grep .pth
如果仍有输出,说明清理不彻底,需要调整
git filter-repo
的路径参数。 -
GitHub 限制:
- 如果单个 LFS 文件超过 GitHub 的 2GB 存储限制,需自行压缩分卷(但当前文件 204MB 未超限)
-
备用方案:
# 如果仍失败,尝试重建仓库 rm -rf .git git init git lfs install git remote add origin https://github.com/latiaoge/AI-Sphere-Butler.git # 重新添加文件并提交
通过以上操作,可确保历史提交中不再包含原生大文件引用,Git LFS 配置与路径完全匹配。