6

Git的文档fsck谈论“悬空”对象,而文档仅谈论“松散对象”。有严格的划分。gc

但是在浏览一些相关的 SO 帖子时,这些术语似乎可以互换使用。在Git Book v2和 Git 的源代码中:

   (main) $ git checkout v2.33.0
(225bc32) $ rg 'dangling (object|commit|blob|tag|tree)' | wc -l
      31
(225bc32) $ rg 'loose (object|commit|blob|tag|tree)' | wc -l
     117

最后,这两个命令经常按顺序使用,从它们的行为中我可以清楚地看出它们的目标是相同的。

因此,“悬空”和“松散”只是同一概念的两个相似术语。这个总结正确吗?


或者“松散的对象”是一个类别,而“悬空”是故意为特定类型的对象保留的?

4

1 回答 1

7
  • 松散的物品 - 是那些没有打包的物品。Git 可以将许多松散的对象压缩成一个单独的包文件。
  • 悬空对象 - 是没有被任何东西引用的对象(例如,一个没有分支/标签指向它的孤儿提交)。它是垃圾,在某个时候会被 GC 收集。
  • “无法访问”的对象(参见@torek 的评论)。如果提交 A 是 B 的父级,那么即使 B 是,A 也不会悬空。相反,A 是“无法到达的”。它也是垃圾的一部分。

松散的物体可以是悬空的,包可以包含悬空的物体。所以这些概念是正交的。但是您可以创建一个引用(分支,标签),它将引用一个悬空提交,它将停止“悬空”。

于 2021-09-09T07:20:55.017 回答