aLoNe.Adams.K

独孤圣人的技术小站

改写历史,永久删除git库的物理文件

最近遇到了本地commit的代码体积过大,无法提交到gitee的问题,查阅资料后找到解决方案,在此写出分享
1. 先使用命令查看大文件路径

git rev-list --objects --all | grep -E `git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}' | sed ':a;N;$!ba;s/\n/|/g'`
  1. 提示出来的信息如下
11f62a5199a343d506d763a71c1b44e0f9e0628c PCSoftware/Document/SDK/TTesseractOCR4-master/bin/tessdata/chi_sim.traineddata
f4744c201359d02ced6914c77f0de68ee9bbdd74 PCSoftware/Document/SDK/TTesseractOCR4-master/bin/tessdata/eng.traineddata
c40e0fb8e7337703b1bef6828a60ecfc8b253f24 PCSoftware/Document/SDK/中安护照阅读器开发包SDKSinosecu Passport Reader32bitV6.7.5.3/Websocket/Websocket2015Http6.7.5.3.iso

前面是提交的commitid,后面是文件路径
3. 执行下方命令,开始清理历史数据,注意代码中的path/to/large/files是上一个命令中显示的文件路径

git filter-branch --tree-filter 'rm -f path/to/large/files' --tag-name-filter cat -- --all
git push origin --tags --force
git push origin --all --force
  1. 执行完毕后,大文件就从历史中删除了。不过之后要告诉组员,再下次push之前,先执行pull rebase,否则会从该组员的本地仓库再次引入到远程库中,你这次的工作就白做了。
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注