gpt4 book ai didi

git - 如何知道 git 浅克隆的深度?

转载 作者:IT王子 更新时间:2023-10-29 01:03:33 27 4
gpt4 key购买 nike

如果我检索一个浅克隆,例如

git clone --depth 10 http://foo.bar/baz.git

git 是否有任何命令来检索此克隆的深度? (例如,仅打印 10 的命令)。

最佳答案

简短的回答:没有。该数字不会存储在任何地方(除非您自己存储它——如果 Git 将它保存在 .git/config 某处可能会更好)。

当且仅当文件 .git/shallow 存在时,存储库是浅存储库(根据 Git 的内部定义)。这个文件的内容有点偷偷摸摸:大多数 Git 以与 .git/grafts 完全相同的方式对待它。也就是说,shallow 文件中的每一行都包含一个提交哈希 ID(与 grafts 相比,没有别的,其中每一行后面都是所有嫁接的父 ID:因为行为空,没有父 ID,并且提交成为根提交)。 (Git 可以在内部将其标记为“不是真正的根”,表明它具有从未获得过的父项。为了完全可靠,这还需要确保没有实际根提交 ID 是曾经存储在文件中,我不确定是否是这种情况。)

您可以计算所有引用的最大深度:从每个引用开始,计算从最顶端提交到(可能是嫁接的)根的图形深度。但是,这不一定是传递给 --depth 的数字(此处或稍后,将 --depth 提供给 git fetch).

例如,假设我们克隆一个只有两个提交的存储库,同时还使用 --depth 10。最深的链是一个或两个提交长,因为只有两个提交:一个(真正的)根提交,一个提交可能有另一个作为其父项,或者可能是另一个(真正的)根提交。如果——在这种情况下,我不知道答案——.git/shallow 文件从不包含真正的根,此时它会是空的,我们会知道最长的链有多长,--depth 参数必须大于该值,但我们不知道实际数字。

另一方面,假设我们使用 --depth 10 克隆一个 10 次或更多次提交的存储库,并获得由假根终止的 10 次提交链 -接枝。然后我们向这个 10 长的链添加两个 提交,这样我们就有了一个 12 提交的链。 --depth 仍然是 10,但算上链,我们发现 12。

因此,这显示了计算计数可能过小或过大的两种方式。但是,在许多情况下,计算出的计数会工作得很好。要计算计数,请使用 git for-each-ref 查找每个引用,并在每个找到的引用上使用 git rev-list --count --first-parent。无论您获得什么最大值,都可能是深度数,或者足够接近的值。

关于git - 如何知道 git 浅克隆的深度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37182919/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com