git踩坑日记——提交大文件后不能push的解决

1.情景

使用Hexo+Github Pages方案建立的博客,想要将一个300多MB的文件上传至博客提供下载。结果部署的时候出了问题。

github pages 默认的文件不能超过100MB,如果要上传大文件,必须要使用 git-lfs 。GitHub的git-lfs有1GB的免费空间,超过需要收费。

然后hexo d把大文件传上去后就会报错。
git踩坑日记——提交大文件后不能push的解决_第1张图片
问题来了,在这种情况下,即使你把大文件从目录中删除后,再使用hexo clean清除之后重新hexo ghexo d,hexo还是会把大文件部署上去,然后接着被githu服务器拒绝。

2.原因

Hexo是使用git部署的。而git在commit后,会将历史版本保存在 .git文件夹中。当你删除工作目录中的文件时,这个文件并没有真正意义上的删除。它还是存在于 .git 这个隐藏文件夹中的 object 子文件夹中。所以hexo仍然会将其部署上去。

3.解决方案

方案一

step 1 – 找到仓库记录中的大文件。

git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"

step 2 – 重写这些大文件

git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch {大文件的文件名}' --tag-name-filter cat -- --all

git踩坑日记——提交大文件后不能push的解决_第2张图片
关于git filter-branch --tree-filter 'rm -f的详细用法,可以参考官方文档。
step 3 – 强制同步到远程仓库

git push origin --force --all

方案二

如果是仅仅为了解决Hexo博客不能部署的问题,可以删除 博客目录的 .deploy_git文件夹下的 .git子文件夹(大文件的历史就保存在该文件下)。然后在 .deploy_git文件夹目录下重新git init ,再回到hexo项目的根目录下重新hexo ghexo d就行了。

你可能感兴趣的:(git,git,github)