如果我检索浅色克隆,例如
git clone --depth 10 http://foo.bar/baz.git
git
是否有任何命令来检索此克隆的深度? (例如,只打印10
)的命令。
答案 0 :(得分:7)
简答:不。这个数字不存储在任何地方(除非你自己存储 - 如果Git在.git/config
某处保存它可能会很好。)
当且仅当文件.git/shallow
存在时,存储库才是浅层的(通过Git的内部定义)。这个文件的内容有点偷偷摸摸:大多数Git都以与.git/grafts
完全相同的方式处理它。也就是说,shallow
文件中的每一行都包含一个提交哈希ID(没有别的,vs grafts
,其中每一行都跟着所有嫁接的父ID:因为该行是空的,所以没有父ID,提交成为根提交)。 (Git可以在内部将其标记为“不是真正的根”,表明它具有从未获得的父级。为了完全可靠,这还需要确保没有实际的根提交ID曾经存储在文件中,我不确定是否是这种情况。)
您可以计算所有引用的最大深度:从每个引用开始,计算从最顶端提交到(可能已移植)根的图深度。但是,这不一定是传递给--depth
的数字(此处或稍后,--depth
赋予git fetch
)。
例如,假设我们克隆了一个只有两次提交的存储库,同时也使用了--depth 10
。最深的链是一个或两个提交长,因为只有两个提交:一个(真实)根目录,一个提交可能另一个作为其父,或者可能是另一个(真正的)根提交。如果是这种情况我不知道答案 - .git/shallow
文件永远不会包含真正的根,那么此时它将是空的,我们会知道,无论条件最长,{{1} }参数必须大于那个,但我们不知道实际的数字。
另一方面,假设我们使用--depth
克隆一个10或更多提交的存储库,并获得由伪根移植终止的10个提交链。然后我们向这个10-long链添加两个 new 提交,这样我们就有了一个12-commit链。 --depth 10
仍然是10,但计数链,我们找到12。
因此,这显示了计算计数可能太小或太大的两种方式。但是,在许多情况下,计算的计数效果会很好。要获得计算的计数,请使用--depth
查找每个参考,并在每个找到的参考上使用git for-each-ref
。无论你得到什么最大值,都可能是深度数,或者足够接近的东西。