【GIT】git gc 真的清理掉了垃圾对象吗?

本文探讨了Git中垃圾对象的产生,主要来自多余的add和已删除的分支。通过测试发现,执行`git gc`并不会删除垃圾对象,而是将有用的对象打包进pack文件夹。要彻底删除垃圾对象,需要采取其他方法。测试过程包括创建分支、修改文件、提交、删除分支,并观察`git gc`前后对象的变化。
摘要由CSDN通过智能技术生成

了解Java的同学应该听过GC这个词 ➡ garbage clean,没错清理垃圾对象~

首先我们先确定下在git中,垃圾对象是怎么产生的?

主要有两个途径:

  1. 由于多余的add

  2. 已删除的分支

那么,git gc真的是像Java一样把git中产生的垃圾对象清除掉了吗---·?

下面用一个测试来瞅下

(嘿嘿》〉着急看结论的同学可以直接滑到文末~)

  • 新建一个名为aqin-branch(名字自己随意~)的分支

    • git checkout -b aqin-branch

  • 新建一个文本文件aqin.txt

    • echo "da">aqin.txt
  • 将文件添加进索引区

    • git add aqin.txt

  • 对文档进行修改,再次添加索引区

    • echo "heheheda">aqin.txt
      git add aqin.txt

​此时的3b2b1a对象其实就是一个垃圾对象(其实就是没用的对象),因为aqin.txt这个文件在后commit前已经被修改过并再次add了,是不会被commit的,我们只会直接commit后面最新修改过的对象

  • 提交到本地仓库

    • git commit -m "test"

新增的这两个对象分别是tree和commit

  • 删除新建分支(测试删除分支不会删掉只在该分支的commit过的对象)

  • 直接删除会报错

  • 报错原因:⚠️无法删除当前正处于的分支,如删除当前分支则需要先换到别的分支上(如master,就像你不能拆掉你现在站的那层楼梯,只能先下一层或者上一层)

  • 新建一个分支test,然后切换到新分支后再次删除分支aqin-branch

  • 而此时,objects文件夹下的内容并未发生变化

  • 故➡️删除分支不会删掉只在该分支的commit过的对象

  • 使用git gc的效果

  • 再次查看objects文件夹

    • 变化:

      • 之前4个对象变成了一个对象(这个对象就是第一次add后生成的那个3b2b1a,即垃圾对象)

      • pack文件夹里新增加了2个文件(一个.idx索引文件,一个pack压缩文件)

    • 总结:

      • 通过git gc无法把垃圾对象删除掉,只会把有用的对象pack进pack文件夹

🎉🎉🎉~

-·-·-> 下篇记录如何真正删除垃圾对象哈~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AQin1012

求小鱼干呢~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值