Golang中如何从Git删除大文件
Golang中如何从Git删除大文件 三天前,我犯了个愚蠢的错误,向项目中添加了一个215MB的文件,并把它纳入了版本控制系统。
它被推送到了GitHub。在那里我看到了它原始的大小。
之后我尝试删除它并推送,但一直收到推送失败的消息,提示文件超过了100MB的限制。
我在本地仓库中看不到这个文件,但我猜它是在尝试推送我之前添加该文件的提交。(我不明白它当初是怎么传到GitHub的,不过……)。
我只想把它从所有地方彻底删除,然后继续我的项目。
任何建议都将不胜感激。
我不想在上面的描述中罗列我所有尝试纠正此问题的操作,以免显得杂乱。我尝试过增加缓冲区大小、安装LFS(并将现有文件迁移到LFS),至少这解决了“RPC失败,远程意外挂断”的错误。
我也尝试过在GitHub上直接编辑文件,将其缩减到几个字节,但无济于事。
所以我卡住了。
我看到一个建议是克隆项目,但我只想把它作为最后的手段(这真的有用吗?)。
最后,正如我提到的,我增加了post缓冲区的大小——我该如何将其恢复为默认大小?(我想我应该这么做???)。
谢谢。
附注:我是在Windows 11机器上通过GoLand进行操作的。
更多关于Golang中如何从Git删除大文件的实战教程也可以访问 https://www.itying.com/category-94-b0.html
git reset --hard xxxx
git push origin xxxx --force
与其尝试向 Git 记录添加操作,不如尝试回滚。
更多关于Golang中如何从Git删除大文件的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这是一个典型的Git大文件问题,需要从Git历史中彻底删除大文件。以下是解决方案:
1. 首先备份你的仓库
cd /path/to/your/repo
git clone --mirror . ../backup-repo
2. 使用BFG Repo-Cleaner(推荐)
下载BFG:https://rtyley.github.io/bfg-repo-cleaner/
# 创建裸仓库
git clone --mirror https://github.com/yourusername/yourrepo.git
# 删除大文件(替换your-large-file.ext为你的文件名)
java -jar bfg.jar --strip-blobs-bigger-than 100M yourrepo.git
# 或者删除特定文件
java -jar bfg.jar --delete-files your-large-file.ext yourrepo.git
# 清理并重新打包
cd yourrepo.git
git reflog expire --expire=now --all
git gc --prune=now --aggressive
# 强制推送到远程
git push --force
3. 使用git filter-branch(如果BFG不可用)
# 查找大文件
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
# 从所有提交中删除文件
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch path/to/your-large-file.ext" \
--prune-empty --tag-name-filter cat -- --all
# 清理本地引用
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
# 强制推送
git push origin --force --all
git push origin --force --tags
4. 对于团队协作的情况
# 通知所有团队成员
# 让他们执行:
git fetch --all
git reset --hard origin/main # 或你的分支名
5. 恢复post缓冲区大小
# 查看当前配置
git config --global --get http.postBuffer
# 恢复默认(通常为1MB)
git config --global http.postBuffer 1048576
# 或者完全删除该配置
git config --global --unset http.postBuffer
6. 验证清理结果
# 检查仓库大小
git count-objects -vH
# 验证文件已从历史中删除
git log --all --full-history -- path/to/your-large-file.ext
重要注意事项:
- 强制推送会重写历史,确保你是唯一的工作者,或已通知团队成员
- 清理后需要所有协作者重新克隆仓库
- GitHub上的Pull Request可能会受到影响
GoLand中的操作:
在GoLand的终端中执行上述命令,或使用:
- VCS → Git → Push(勾选"Force Push")
- VCS → Git → Repository → GC
如果问题仍然存在,考虑在GitHub上创建新仓库并重新推送清理后的版本。

