获取远程分支上的git sha深度

时间:2016-10-08 17:56:07

标签: git

我想使用git clone --depth [N],但要使用保证获得特定sha的N

如何确定远程仓库中的sha的深度。注意在本地克隆它是为了捕获22.我想这样做是为了避免克隆它。

2 个答案:

答案 0 :(得分:3)

选项1:

如果您能够获得存储库的完整克隆,则可以使用git rev-list HEAD ^42c6ee9 --count找到深度。

这将找到任何特定提交的深度。没有远程版本,因此只有在您可以保留完整副本然后ssh进入其中以确定深度时才有效。

这使您只需要克隆一次,但是您可以在以下所有时间内回答问题,并希望进行浅层复制。

选项2:

使用git clone --depth 1然后迭代git fetch --depth=i+1实际上是一个值得测试的好主意。 (同样由@leon提出)。

根据存储库的特性,这是有意义的。

E.g。 Django存储库有23330次提交(在测试时)

./ full.sh - 拉动完整的本地存储库

git clone https://github.com/django/django

./ oracle.sh - 如果你神奇地知道正确的答案。按时下限。

git clone --depth 10 https://github.com/django/django.git

./ search.sh - 迭代

git clone --depth 1 https://github.com/django/django.git
cd django

i=1
until git show 5d35181 > /dev/null
do
    i=$((i+1))
    git fetch --depth=$i
done

搜索虽然有开销,但仍可能比完整克隆更快出现。

./full.sh  21.34s
./oracle.sh 1.12s
./search.sh 3.05s

答案 1 :(得分:1)

您可以使用git clone --depth 1创建初步浅层克隆,然后使用git fetch --depth N逐步增加历史记录深度,直到所需的提交到达。

来自git-fetch的文档:

  

<强> --depth=<depth>

     

从每个提示的尖端限制提取到指定的提交数   远程分支历史。如果正在获取创建的存储库   git clone选项--depth=<depth>(参见git-clone),    将历史记录加深或缩短为指定的提交数量 。标签   因为没有深化提交。