"dangling" 和 "loose" 对象相同吗?
Are "dangling" and "loose" objects the same?
Git 的 fsck
doc talks about "dangling" objects, while the gc
doc 只谈论“松散的对象”。有一个严格的拆分。
但是在浏览一些相关的 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
最后,这两个命令经常按顺序使用,我从它们的行为中可以清楚地看出它们针对的是相同的东西。
因此,“悬挂”和“松散”只是同一概念的两个相似术语。这个总结正确吗?
或者“松散的物体”是一个类别,而“悬垂”是有意为特定类型的物体保留的?
- 松散物品 - 是那些没有包装的物品。 Git 可以将许多松散的对象压缩到一个包文件中。
- 悬挂对象 - 未被任何对象引用的对象(例如,没有 branch/tag 指向它的孤立提交)。它是垃圾,总有一天会被 GC 收集。
- “无法访问”对象(请参阅@torek 的评论)。如果提交 A 是 B 的父级,那么即使 B 是,A 也不是悬空的。相反,A 是“无法访问的”。也是垃圾的一部分。
松散的物品可以悬挂,包装可以包含悬挂的物品。所以这些概念是正交的。但是你可以创建一个引用(分支,标签)来引用悬空提交,它将停止“悬空”。
Git 的 fsck
doc talks about "dangling" objects, while the gc
doc 只谈论“松散的对象”。有一个严格的拆分。
但是在浏览一些相关的 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
最后,这两个命令经常按顺序使用,我从它们的行为中可以清楚地看出它们针对的是相同的东西。
因此,“悬挂”和“松散”只是同一概念的两个相似术语。这个总结正确吗?
或者“松散的物体”是一个类别,而“悬垂”是有意为特定类型的物体保留的?
- 松散物品 - 是那些没有包装的物品。 Git 可以将许多松散的对象压缩到一个包文件中。
- 悬挂对象 - 未被任何对象引用的对象(例如,没有 branch/tag 指向它的孤立提交)。它是垃圾,总有一天会被 GC 收集。
- “无法访问”对象(请参阅@torek 的评论)。如果提交 A 是 B 的父级,那么即使 B 是,A 也不是悬空的。相反,A 是“无法访问的”。也是垃圾的一部分。
松散的物品可以悬挂,包装可以包含悬挂的物品。所以这些概念是正交的。但是你可以创建一个引用(分支,标签)来引用悬空提交,它将停止“悬空”。