git - "dangling"和 "loose"对象是否相同?

标签 git git-gc git-plumbing git-fsck

Git的 fsck doc谈论“悬空”对象,而 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
最后,这两个命令经常按顺序使用,从他们的行为来看,我似乎很清楚它们的目标是相同的东西。
因此,“dangling”和“loose”只是同一个概念的两个相似术语。这个总结正确吗?

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

最佳答案

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

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

    关于git - "dangling"和 "loose"对象是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69113771/

    相关文章:

    git - 如何在 Git 日志中包含当前文件夹名称

    git - 什么时候 git prune objects : why is "git gc" not removing commits?

    git - 如何真正删除一个 git 分支(即删除它的所有对象/提交)?

    git - 如何在git中检查裸仓库的状态

    git - 如何仅使用管道命令复制 git-checkout?

    git - 将远程 repo url 从 https 更改为 ssh 安全吗?

    git - 将历史记录从 Clearcase 保存到 Git?

    git - 什么管道命令提供与 git log --follow 相同的功能?

    eclipse - 认证失败 : invalid password or missing SSH Key while import project in eclipse docker container