在远程分支上获取git sha depth



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

如何确定一个sha的深度在远程回购。注意,在本地克隆它是第22条问题。我想这样做是为了避免克隆。

选项1:

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

这将找到任何特定提交的深度。没有远程版本,所以只有在您可以维护一个完整的副本,然后将ssh放入其中以计算深度时才有效。

这允许你只需要克隆一次,但之后你就可以回答这个问题,因为你想做一个浅拷贝。

选项2:

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

根据您的存储库的特征,这将是有意义的。

。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 - iterating

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

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

来自git-fetch的文档:

--depth=<depth>

限制从每个文件的顶端提取指定数量的提交远程分支历史。如果抓取到一个存储库创建git clone--depth=<depth>选项(参见git-clone),将历史加深或缩短为指定的提交次数。标签对于深度提交,不能提取。

最新更新