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

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 【GIT】git gc 真的清理掉了垃圾对象吗?,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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

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

主要有两个途径:

  1. 由于多余的add

  2. 已删除的分支

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

下面用一个测试来瞅下

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

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

    • git checkout -b aqin-branch

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

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

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

    • git add aqin.txt

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

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

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

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

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

  • 提交到本地仓库

    • git commit -m "test"

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

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

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

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

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

  • 直接删除会报错

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

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

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

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

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

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

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

  • 使用git gc的效果

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

  • 再次查看objects文件夹

    • 变化:

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

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

    • 总结:

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

🎉🎉🎉~

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135442.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!