我想使用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),将历史加深或缩短为指定的提交次数。标签对于深度提交,不能提取。