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

efzxgjgh  于 12个月前  发布在  Git
关注(0)|答案(2)|浏览(121)

我想使用git clone --depth [N],但要使用这样的N,以保证获得特定的sha。
我如何在远程仓库中确定sha的深度。注意,在本地克隆它是第22条军规。我想这样做是为了避免克隆它。

k2arahey

k2arahey1#

选项一:

如果您能够获得存储库的完整克隆,则可以使用git rev-list HEAD ^42c6ee9 --count查找深度。
这将找到任何特定提交的深度。没有远程版本,所以只有当你可以维护一个完整的副本,然后将ssh放入其中以计算深度时,这才有效。
这使您只需克隆一次,然后您就可以回答以下所有您想要进行浅拷贝的时间的问题。

选项二:

使用git clone --depth 1然后在git fetch --depth=i+1上迭代实际上是一个值得测试的好主意。
根据您的存储库的特性,这将是有意义的。
例如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

kupeojn6

kupeojn62#

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

--depth=<depth>

限制从每个远程分支历史记录的顶端提取指定数量的提交。如果提取到由git clone使用--depth=<depth>选项创建的 * 浅 * 存储库(参见git-clone),* 加深或缩短历史记录到指定数量的提交 *。不提取深化提交的标签。

相关问题