2016-05-12 166 views

回答

4

简答题:没有。该号码不会存储在任何地方(除非您自己存储 - 如果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文件从不包含真正的根,它在这一点上将是空的,我们会知道无论最长的链是多长,--depth参数必须大于,但我们不知道实际的数字。

另一方面,假设我们用我们的--depth 10克隆了一个10个或更多提交的存储库,并获得由假根嫁接终止的10个提交链。然后,我们添加两个新的提交到这个10长链,以便我们有一个12提交链。 --depth仍然是10,但计数链,我们发现12.

所以,这表明计算计数可能太小或太大的两种方式。但是,在很多情况下,计算出来的计数会很好。要计算计数,请使用git for-each-ref查找每个找到的参考,并使用git rev-list --count --first-parent。无论您获得的最大数量是深度数还是足够接近。