git clone --depth N ...
创建了一个浅层克隆,其历史记录仅限于最后N个修订版,我可以使用git clone -b tag ...
从tag
获取可访问的提交。但是,有没有一种方法可以从特定的(标记的)提交到分支头获取存储库(或其分支)?
例如,我只想克隆从特定发布标签开始的历史记录。因此,如果远程中的最后几次提交看起来像这个
[master] ...
[master~1] ...
[master~2] ... <-- tag: x.x
[master~3] ...
...
现在,我想克隆历史记录范围x.x~1..
,而不必手动计算给--depth
的修订数量。
我想在公认的答案中给出的解释是;是否有特定于Git克隆的提交选项?这里也适用,所以可能没有直接的方法。
事实上,没有直接的方法,这种计数或基于多个ref的克隆必须在服务器端(提供初始浅层克隆的服务器)实现,才能在git的约束下工作。
不过,还有一种间接的方法:从深度1浅克隆开始,然后重复深化,直到出现标记。令人烦恼的是,git fetch --depth=<N>
不会拾取新标签(但您可以使用git ls-remote
或类似的方法在浅层克隆客户端上一次性获取所有内容,并注意SHA-1)。但我怀疑这种方法会太慢,以至于变得毫无价值。
如果在客户端和服务器端都至少运行Git 2.11,那么如果您知道标记提交的日期和它在哪个分支上,就可以解决问题:
git clone --branch <branch that contains tag> --shallow-since=<date of tagged commit> <url>