Git 移除仓库数据

Git 移除仓库数据

如果不小心在仓库中添加了很大的文件,仅通过撤销操作无法彻底从仓库中删除,.git目录还是很大.需要通过以下的方式,将添加的文件彻底删除.

1. 确定出大容量的文件

如果知道大容量文件的名字,则不需要此步骤.

先整理空间,将小碎文件合并成大文件:

git gc

执行 count-objects 命令来快速的查看占用空间大小:

$ git count-objects -v
count: 7
size: 32
in-pack: 17
packs: 1
size-pack: 4868
prune-packable: 0
garbage: 0
size-garbage: 0

查看占用空间最大的三个文件:

$ git verify-pack -v .git/objects/pack/pack-29...69.idx \
| sort -k 3 -n \
| tail -3
dadf7258d699da2c8d89b09ef6670edb7d5f91b4 commit 229 159 12
033b4468fa6b2a9547a70d88d1bbe8bf3f9ed0d5 blob 22044 5792 4977696
82c99a3e86bb1267b236a4b6eff7868d97489af1 blob 4975916 4976258 1438

查看最大容量文件名称:

$ git rev-list --objects --all | grep 82c99a3
82c99a3e86bb1267b236a4b6eff7868d97489af1 git.tgz

2. 移除大容量文件

如果确定出大容量的文件名称是git.tgz,则通过如下方式移除.
使用以下命令可以轻松地查看哪些提交对这个文件产生改动:

$ git log --oneline --branches -- git.tgz
dadf725 oops - removed large tarball
7b30847 add git tarball

必须重写 7b30847 提交之后的所有提交来从 Git 历史中完全移除这个文件.使用 filter-branch 命令,这个命令在 重写历史 中也使用过:

$ git filter-branch --index-filter \
'git rm --ignore-unmatch --cached git.tgz' -- 7b30847^..
Rewrite 7b30847d080183a1ab7d18fb202473b3096e9f34 (1/2)rm 'git.tgz'
Rewrite dadf7258d699da2c8d89b09ef6670edb7d5f91b4 (2/2)
Ref 'refs/heads/master' was rewritten

指令解析:
–index-filter 修改在暂存区或索引中的文件;
git rm --cached 从索引中移除文件;
–ignore-unmatch 如果尝试删除的模式不存在时,不提示错误;

移除任何包含指向那些旧提交的指针的文件:

$ rm -Rf .git/refs/original
$ rm -Rf .git/logs/

重新打包:

git gc

看看省了多少空间:

git count-objects -v

从 size 的值看出,这个大文件还在你的松散对象中,并没有消失;但是它不会在推送或接下来的克隆中出现,这才是最重要的。 如果真的想要删除它,可以通过有–expire 选项的 git prune 命令来完全地移除那个对象:

git prune --expire now

在看看省了多少空间:

git count-objects -v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值