了解Java的同学应该听过GC这个词 ➡ garbage clean,没错清理垃圾对象~
首先我们先确定下在git中,垃圾对象是怎么产生的?
主要有两个途径:
-
由于多余的add
-
已删除的分支
下面用一个测试来瞅下git gc真的是把git中产生的垃圾对象删除掉了吗---·?
(嘿嘿》〉着急看结论的同学可以直接滑到文末~)
1. 新建一个名为aqin-branch(名字自己随意~)的分支.
git checkout -b aqin-branch
2. 新建一个文本文件aqin.txt
echo "da">aqin.txt
3. 将文件添加进索引区
git add aqin.txt
4. 对文档进行修改,再次添加索引区
echo "heheheda">aqin.txt
git add aqin.txt
5. 提交到本地仓库
git commit -m "test"
6. 删除新建分支(测试删除分支不会删掉只在该分支的commit过的对象)
【注意】直接删除会报错哦···
-
报错原因:⚠️git无法删除当前正处于的分支,如删除当前分支则需要先换到别的分支上(如master,打个比方就像你不能拆掉你现在站的那层楼梯,只能先下一层或者上一层,再去拆掉刚刚想拆的那一层)
7. 新建一个分支test,然后切换到新分支后再次删除分支aqin-branch
而此时,objects文件夹下的内容并未发生变化
故删除分支不会删掉只在该分支的commit过的对象
8. git gc 出场~
下面看下使用git gc的效果 ➡
9. 再次查看objects文件夹
-
结论:通过git gc无法把垃圾对象真正删除,只是删除掉了引用
-·-·-> 下篇记录如何真正删除垃圾对象哈~