关于版本控制:Git:来自特定提交的浅拷贝

Git: Shallow copies from a specific commit

git clone --depth N ... 创建了一个浅克隆,其历史记录仅限于最后 N 个修订,我可以使用 git clone -b tag ... 来获取可从 tag 访问的提交。但是,有没有办法从特定(标记)提交中获取存储库(或其分支)到分支头?

例如,我想只克隆从特定发布标签开始的历史记录。因此,如果远程中的最后几个提交看起来像这样

1
2
3
4
5
[master]   ...
[master~1] ...
[master~2] ... <-- tag: x.x
[master~3] ...
...

现在我想克隆历史记录范围 x.x~1..,而不必手动计算要提供给 --depth 的修订数量。

我猜在接受的答案中给出的解释为什么没有 Git 克隆特定的提交选项?这里也适用,所以可能没有直接的方法。


如果在客户端和服务器端都至少运行 Git 2.11,如果您知道标记提交的日期以及它所在的分支,则有一个解决方法:

1
git clone --branch <branch that contains tag> --shallow-since=<date of tagged commit> <url>


确实,没有直接的方法,这种计数或基于多引用的克隆必须在服务器端(交付初始浅克隆的服务器)实现,才能在 git\\'s 中工作约束。

不过有一个间接的方法:从深度为 1 的浅克隆开始,然后反复加深直到标签出现。令人讨厌的是,git fetch --depth=<N> 不会获取新标签(但您可以使用 git ls-remote 或类似的东西在浅克隆客户端上获取所有内容,并注意 SHA-1)。但我怀疑这种方法会很慢,以至于变得毫无价值。