【发布时间】:2018-03-26 07:17:24
【问题描述】:
当在其父提交图中没有包含它们的标记或分支时,将创建孤立提交。例如,如果您创建一个分支foo,添加提交a 和b,然后删除该分支(即从提交b 中删除引用foo),然后a 和b除非您保存了他们的哈希值,否则将无法访问。
x-x-x-x <- master
\
a-b <- foo (reference then deleted or reset to somewhere on master)
孤立提交的基本 Git 行为是最终垃圾收集并删除它们(我听说默认值至少为 30 天)。
我的问题是这样的:
Git 是否会使用 git clone、git fetch 或 git push 命令将孤立提交从一个存储库转移到另一个存储库?
或者对于不直接调用孤儿哈希的任何操作(例如checkout 或cherry-pick),Git 是否有效地忽略这些提交?
【问题讨论】:
-
至少当您在本地计算机上克隆存储库时会这样做。例如,
git clone ~/foo.git -- ~/bar。如果远程存储库位于另一台服务器上,则不会。但不确定。我想这取决于协议。 -
@ElpieKay 是正确的,它确实取决于底层传输协议。如果发送 Git 选择(无论出于何种原因)将对象发送到包中,则接收 Git 会获取它们,并且必须重新打包以丢弃它们。但是,作为一般规则,任何从名称开始收集对象的东西都不会收集这些对象,因此不会发送它们。
标签: git git-push git-clone git-fetch orphan