- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我看过这个答案for a git clone error ,建议不要克隆整个 repo,而是只克隆最新的提交,然后使用 unshallow 获取其余的提交。
考虑以下两个命令
1.
git clone <url> --depth 1
git fetch --unshallow
和
2.
git clone <url>
两者克隆的最终输出是否相同?如果是这样,对于非常大的存储库,为什么第二个命令比第一个命令运行得快得多?
是否还有其他浅层克隆不能做的事情,或者有一些缺点,特别是在处理大型存储库时?
最佳答案
当您克隆一个非常大的存储库时,您需要传输大量数据。根据您的网络速度,这可能需要很长时间。为了输入一些具体数字,让我们使用 10 GiB 作为整个存储库数据传输大小(数据传输大小和磁盘上的大小会有所不同,但通常相差不大)并假设您可以获得的传输速率1 兆字节/秒。这意味着数据传输需要 10240 MiB/(1 MiB/s) = 10240 s = 170.667 分钟 = 不到 3 小时(大约 2 小时 50 分钟)。
正在使用的各种协议(protocol)内置了错误检测和(通常在硬件级别)校正,但在此期间连接仍有可能失败。如果连接确实失败,git clone
将整个事情视为原子:没有一个有效,因此 Git 将删除整个克隆。
如果使用 --depth 1
进行抓取导致初始克隆仅复制整体数据的大约 1/3,我们将克隆时间减少到大约 1 小时,从而降低了以下风险彻底失败也是如此。然后可以增量地添加到浅层克隆(使用 --deepen
或更大的 --depth
数字到 git fetch
)。其中每一个都有自己的失败风险,但失败只会导致不添加任何对象:现有的克隆没有受到伤害。根据需要重试一个小时的传输比重新启动整个 3 小时的传输只是在 2 小时 20 分钟内失败要轻松得多。1
最终,最后的 --unshallow
会为您提供所有您可能会得到的东西,如果您能够同时无误地进行完整克隆的话。请注意,您可能希望在初始浅克隆期间使用 --no-single-branch
,或者在初始浅克隆之后修复获取 refspec。
Is the final output of the clone the same for both?
这个问题的答案既不是也不是。我们需要准确定义“最终输出”的含义。但是,就对所有提交和其他对象的有用访问而言,结果是相同的(假设您撤消了 --depth
参数的单分支效果)。
If so, how is it that the second command works much faster than the first for a very large repo?
它不一定工作得更快。然而,在进行完整克隆时,Git 可以——不一定做,但可以——只发送一个现有的包文件,而不是构建一个新的包文件。这可以节省发送方的 CPU 时间。如果发送方的(单个)打包文件构造良好,则接收方生成的单个打包文件也构造良好。使用浅层克隆或什至单个非浅层进行重复加深的结果通常会在接收器上产生多个包文件;这些可能构造得不太好。
1这里我说的是实际经验。 :-) 现在的传输速率比 2005 年不稳定的 DSL 布线要高,但存储库现在也更大了。而且,即使是现在,美国在某些地方的互联网基础设施也很糟糕。
关于git "shallow clone + unshallow"与 "normal clone",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67838180/
什么是 vb6 或 java 中的对象克隆?我们在什么情况下使用克隆?克隆对象是什么意思?谁能用例子告诉我。 最佳答案 克隆实际上是将对象数据复制到新对象中。 此示例不克隆数据: Foo p = ne
ArrayList a=new ArrayList(); a.add(5); ArrayList b=(ArrayList)a.clone(); a.add(6); System.out.printl
这个问题在这里已经有了答案: Why does cloned() allow this function to compile (1 个回答) 关闭 3 个月前。 假设我们有一个可以克隆的某种类型的
我有这样的代码,我需要在其中将某些内容插入到两个单独的 HashMap 中。我只想要实现克隆的通用类型。 use std::collections::HashMap; use std::clone::
这段代码(also on play) use std::sync::Arc; struct Foo { x: isize, // Something complex in actual cod
我有按钮 Drag to insert h1 tag 当你拖动它时,我希望按钮留在原来的位置,助手是 Example在你放下它的地方,你会放下h1没有任何可拖动或 jQuery UI 样式的标记。 所
覆盖 clone 方法,而不实现 Cloneable 接口(interface)并且不调用 super.clone() 是一个好习惯。这样,就不会抛出 CloneNotSupportedExcepti
public abstract class Shape implements Cloneable { private String id; protected String type;
克隆远程仓库后,它不会通过 -a 选项显示任何远程分支。可能是什么问题呢?如何调试呢?在此片段中,未显示两个远程分支: $ git clone --depth 1 git://git.savannah
我看过这个答案for a git clone error ,建议不要克隆整个 repo,而是只克隆最新的提交,然后使用 unshallow 获取其余的提交。 考虑以下两个命令 1. git clone
当在网上搜索如何以多态方式深层复制对象的可能性时,我发现了 solution声称可以使用 clone() 方法解决许多问题,例如无法克隆 final 字段。该解决方案结合了在 clone() 实现中使
我正在尝试创建一个动态表单来向业务合作伙伴展示。 目标是能够在单击按钮时根据需要添加选择元素。但是,当它被点击时,它会复制模板两次,而不是一次。 这里只是我尝试过的代码的一些变体和 here is t
我知道实现 Object#clone() 的约定表明您应该调用 super.clone() 来获取复制的对象。 但我只是想知道如果我不这样做的话会有什么后果。让我们假设这个例子: class Some
我所说的示例:http://jsfiddle.net/bsnxp/1/ 如果你检查源 .show().clone() display 是 inline-block (它应该是什么)并且 .clone(
我正在编写代码来创建对象、克隆对象,然后比较两者。 所讨论的对象 Octagon 是对象 GeometricObject 的扩展 public class Octagon extends Geomet
我看到clone()在django代码中被广泛使用 queryset.query.clone() queryset.clone() 它的用途是什么?我应该模仿查询集或管理器方法中的行为吗? 最佳答案
我尝试导入 git project进入 eclipse 。手册告诉我在控制台中使用此命令: git clone http://git-wip-us.apache.org/repos/asf/mina-
我正在使用 jquery .clone(),它工作正常。但是我的问题是,当我克隆我的输入字段时,它也会克隆前一个字段的值。我不想克隆该值。我该如何克服这个问题? 这是我的代码 function add
在 this SO thread 中,结果表明,在制作项目副本方面,切片比任何方法都快。 使用: list1 = ['foo','bar'] copy1 = list1 * 1 list1.pop()
我有一个自动脚本可以解析服务器并克隆其中一个文件夹中的所有存储库。它所做的伪代码是: for each repo_name if a folder named like repo_name exi
我是一名优秀的程序员,十分优秀!