Git 是否会在顶级存储库引用的子模块中进行垃圾收集提交?

uvs*_*tid 6 git git-submodules

比方说:

\n\n
 top.git     \n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 sub.git => 75fc7\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  • 顶级 Git 存储库是top.git指.75fc7sub.git
  • \n
  • 子模块 Git 存储库sub.git既没有分支也没有导致提交75fc7(无法访问)的标签。
  • \n
\n\n

最终是否会因为没有任何东西可以到达而sub.git对该提交进行垃圾收集?75fc7

\n\n

AFAIK,Git 子模块的设计方式在本例中sub.git无法证明它是任何其他存储库的子模块。换句话说,提交75fc7实际上是垃圾收集的候选者。如果子模块可能“忘记”所需的提交,那么恢复所有子模块的状态将是不可靠的。

\n

uvs*_*tid 2

实际上,由于这个答案,测试很容易。

是的,即使顶级存储库引用了该提交,也会对其进行垃圾收集。

然后,它需要一些措施或规则来确定哪些提交可以在顶级存储库中使用,以便在将来的任何时间可靠地恢复整个树跨越子模块。此类提交必须是任何长期维护的分支或标签的祖先。