VSTS Git对象数量远超预期,发布检出耗时久求助
解决Git/VSTS仓库对象过多、检出缓慢的问题
嘿,别担心,我能理解你现在的困扰——刚用Git和VSTS做开发就碰到发布慢的问题,确实挺闹心的。你说已经删掉了大图片文件夹但对象数还是没减,其实核心原因是Git会保留所有历史提交里的文件记录,哪怕你当前分支删了这些文件,之前的提交里它们还存在,所以仓库对象数不会自动减少。git gc只是清理冗余的松散对象,但不会动历史里的大文件,所以没效果很正常。
下面给你一步步的解决办法:
第一步:找出历史里的大文件
先搞清楚到底是哪些文件在占用空间,运行这个命令可以列出仓库里最大的10个对象对应的文件和提交信息:git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')"执行后你就能看到那些曾经存在的大图片文件对应的历史记录了。
第二步:彻底移除历史中的大文件
推荐用git filter-repo工具(这是Git官方现在推荐的替代旧filter-branch的工具,更安全稳定)来清理历史里的大文件。比如你要移除整个旧的大图片文件夹,就运行:git filter-repo --path 旧图片文件夹路径 --invert-paths✅ 注意:这个操作会改写仓库的全部历史,如果你的仓库是团队协作使用的,一定要提前通知所有队友,让他们之后重新克隆仓库,不要在旧分支上继续开发!
第三步:强制推送到VSTS
清理完本地历史后,需要把改写后的仓库强制推送到VSTS,覆盖远程的旧历史:git push origin --force --all # 如果有标签需要同步的话,再运行下面这条 git push origin --force --tags第四步:再次清理本地仓库
最后运行清理命令,这次就能有效减少对象数了:git gc --aggressive --prune=now
后续预防建议
- 用
.gitignore文件把不需要跟踪的文件(比如临时文件、依赖包、大媒体文件)排除在外,避免它们被误提交到仓库。 - 如果确实需要在仓库里保留大文件(比如设计图、视频),建议使用Git LFS(Large File Storage),VSTS原生支持Git LFS,它会把大文件存在单独的存储区,不会让仓库体积膨胀。
内容的提问来源于stack exchange,提问作者Brendan Gooden
相关产品推荐
相关产品推荐

