【问题标题】:Git: Shallow copies from a specific commitGit:来自特定提交的浅拷贝
【发布时间】:2017-03-31 16:13:04
【问题描述】:

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

【问题讨论】:

    标签: git version-control


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-04-12
        • 1970-01-01
        • 2015-01-13
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        相关资源
        最近更新 更多