Git:来自特定提交的浅拷贝

时间:2015-11-09 15:35:11

标签: git version-control

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?接受的答案中给出的解释也适用于此,因此可能没有直接的方法。

2 个答案:

答案 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>