git clone --depth N ...
创建一个浅层克隆,其历史记录仅限于最后N个版本,我可以使用git clone -b tag ...
来获取可从tag
到达的提交。但是,有没有办法从特定(标记)提交到分支头获取存储库(或其分支)?
比如说,我想只从特定版本标签开始克隆历史记录。因此,如果遥控器中的最后几个提交看起来像这样
[master] ...
[master~1] ...
[master~2] ... <-- tag: x.x
[master~3] ...
...
现在,我想要克隆历史记录范围x.x~1..
,而无需手动计算要提供给--depth
的修订数量。
我想在Why Isn't There A Git Clone Specific Commit Option?接受的答案中给出的解释也适用于此,因此可能没有直接的方法。
答案 0 :(得分:0)
实际上,没有直接的方法,这种计数或基于多重引用的克隆必须在服务器端(提供初始浅克隆的服务器)上实现,以使其在git中工作。约束。
这是间接的方式:从深度1浅克隆开始,然后反复加深直到标签出现。令人讨厌的是,git fetch --depth=<N>
无法获取新标记(但您可以使用git ls-remote
或类似内容在浅克隆客户端上获取所有内容,并注意SHA-1)。但是我怀疑这种方法会慢到让它变得毫无价值。
答案 1 :(得分:0)
如果在客户端和服务器端至少运行Git 2.11,如果您知道标记提交的日期以及它所在的分支,则可以解决此问题:
git clone --branch <branch that contains tag> --shallow-since=<date of tagged commit> <url>