念念不忘
必会回响

Git仓库瘦身

最近需要备份一下近些年开发的项目,于是就决定将代码上传到github留作备份。经过这些年的开发,各个仓库也是大的离谱,平时都是用gitea管理,所以可以肆无忌惮的使用,但迁移到github时,总是提示个别文件太大,需要使用git lfs做,如果只是项目中的文件,这样做倒没啥问题,反正也不会频繁拉取,但有些大文件是.git/objects/xxx.pack,这个似乎就不太好弄了。所以,就打算给仓库瘦身一下,其实项目里包含了不少二进制文件,到时候看看把这些提交记录都删了。

1. 找到git中比较大的文件

git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5

这里因为用到了sort和tail命令,所以如果是在Windows下使用,需要打开git bach对话框,而不是powershell。

输出如下:

$ git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
05cdb5f3172393708884d29ec2bd7d827bb44afa blob   10871160 9317135 124763
bc02a6f7e2adfeb6945beefeedee3acc49b08261 blob   27036450 22417168 2475829
bc02a6f7e2adfeb6945beefeedee3acc49b08261 blob   27036450 22417168 9441898
932b0817e18e9a96159e13138ec91798df7630ef blob   89457544 89466775 182616983
c8637fe538c5d654a0b273b8a2b2cda17fc1761c blob   119170666 118214613 63546291

第一列是id,第三列是大小

2. 根据上一步的id查找文件名

因为github超过100M才会拒绝提交,超过50只会警告。所以就找大于100M的文件,根据这个ID查找文件。

$ git rev-list --objects --all | grep c8637fe538c5d654a0b273b8a2b2cda17fc1761c
c8637fe538c5d654a0b273b8a2b2cda17fc1761c project_name.git/objects/pack/pack-d259dd00cf7766814486907ff31c81c86211d248.pack

3. 删除文件

看来是某一个提交太大导致的,确认没啥问题,开删(删错了也没关系,反正远程仓库还在)。

要删除的文件名是 project_name.git/objects/pack/pack-d259dd00cf7766814486907ff31c81c86211d248.pack,其他的是模板,就这一个变量。

$ 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
WARNING: git-filter-branch has a glut of gotchas generating mangled history
         rewrites.  Hit Ctrl-C before proceeding to abort, then use an
         alternative filtering tool such as 'git filter-repo'
         (https://github.com/newren/git-filter-repo/) instead.  See the
         filter-branch manual page for more details; to squelch this warning,
         set FILTER_BRANCH_SQUELCH_WARNING=1.

等着删吧,这得好久。

4. 提交代码到github

删除完成后,没有大于100M的文件时,直接上传到github,建议只需要提交到github即可,原始仓库不要提交。

github  https://github.com/xxxx/project_name.git (fetch)
github  https://github.com/xxxx/project_name.git (push)

确认仓库有github的地址,然后提交。

git push github --force --all  
赞(0) 打赏
未经允许不得转载:堆上小栈 » Git仓库瘦身

评论 1

  1. #1

    赞一个

    烟花易冷3周前 (04-08)回复

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册