Git仓库瘦身
最近需要备份一下近些年开发的项目,于是就决定将代码上传到github留作备份。经过这些年的开发,各个仓库也是大的离谱,平时都是用gitea管理,所以可以肆无忌惮的使用,但迁移到github时,总是提示个别文件太大,需要使用git lfs做,如果只是项目中的文件,这样做倒没啥问题,反正也不会频繁拉取,但有些大文件是.git/objects/xxx.pack,这个似乎就不太好弄了。所以,就打算给仓库瘦身一下,其实项目里包含了不少二进制文件,到时候看看把这些提交记录都删了。
找到git中比较大的文件
1 | git verify-pack -v .git/objects/pack/pack-*.idx sort -k 3 -g tail -5 |
这里因为用到了sort和tail命令,所以如果是在Windows下使用,需要打开git bach对话框,而不是powershell。
输出如下:
1 | $ git verify-pack -v .git/objects/pack/pack-*.idx sort -k 3 -g tail -5 |
第一列是id,第三列是大小
根据上一步的id查找文件名
因为github超过100M才会拒绝提交,超过50只会警告。所以就找大于100M的文件,根据这个ID查找文件。
1 | $ git rev-list --objects --all grep c8637fe538c5d654a0b273b8a2b2cda17fc1761c |
删除文件
看来是某一个提交太大导致的,确认没啥问题,开删(删错了也没关系,反正远程仓库还在)。
要删除的文件名是 project\_name.git/objects/pack/pack-d259dd00cf7766814486907ff31c81c86211d248.pack,其他的是模板,就这一个变量。
1 | $ git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch project_name.git/objects/pack/pack-d259dd00cf7766814486907ff31c81c86211d248.pack' --tag-name-filter cat -- --all |
等着删吧,这得好久。
提交代码到github
删除完成后,没有大于100M的文件时,直接上传到github,建议只需要提交到github即可,原始仓库不要提交。
1 | github https://github.com/xxxx/project_name.git (fetch) |
确认仓库有github的地址,然后提交。
1 | git push github --force --all |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 码农笔记!
评论
WalineDisqus








