[英]What's the alternative to git --shallow-since using git clone depth
我克隆的git服务器不支持shallow-since。 当我尝试这样做时,出现以下错误:
fatal: Server does not support --shallow-since
我不介意改用git clone -depth=N
,但是如何确定提交的 N 呢?
从技术上讲,这些是不同的:
--shallow-since= date
获取提交时间戳晚于(并且可能等于,boundaries are hard)给定时间戳的提交;--depth= number
获取其名称(分支名称、标记名称和您告诉 Git 使用的任何其他名称)的计数深度在给定步数内的提交。也就是说,考虑具有以下提交的 Git 存储库:
A--B--C <-- master
\
D--E--F--G <-- develop
假设C
、 E
、 F
和G
都是今年的日期, A
、 B
和D
都是前一年的日期。 如果你这样做:
git clone --shallow-since=<this year> --no-single-branch
你会得到这样的提交C
和EFG
:
...--C <-- origin/master
...--E--F--G <-- origin/develop
但是,如果您这样做:
git clone --depth=2 --no-single-branch you will get:
...--B--C <-- origin/master
...--F--G <-- origin/develop
即,每个名称的两次提交。 (没有从G
回到B
的链接,因为这需要从G
向后退四步才能到达D
,我们告诉 Git 在两步后切断一切。)
由于--depth
默认启用--single-branch
,这种特性往往会被隐藏:如果你只是告诉你的克隆制作一个origin/master
,那么相同的深度是否适用于彼此的名字并不重要也。 添加--no-single-branch
选项使差异更加清晰。
在任何情况下,如果您不能直接访问服务器,计算深度的明显方法是进行完整(但可选,单分支)克隆,然后检查您现在在本地拥有的存储库中的提交者日期. 然后你可以计算从你想要的最后日期到分支提示的修订,它告诉你有多少提交要克隆。
当然,到这个时候,你已经有了一个完整的克隆,所以你也可以直接使用它。
一个可行的替代方法是使用一些固定的--depth
进行初始克隆。 然后,检查最早提交的提交者时间戳。 如果该日期在您的截止日期之后,请使用git fetch --deepen
(或再次使用--depth
)加深浅层克隆。 重复检查和加深直到存储库足够深。
(最初要克隆的提交数,然后是每次提取添加的提交数,取决于将每组提交移交所需的时间,以及设置另一轮git fetch
所涉及的开销,因此没有明显的正确数字可供使用.)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.