有啥方法可以增量地从 Web 克隆存储库?

Posted

技术标签:

【中文标题】有啥方法可以增量地从 Web 克隆存储库?【英文标题】:Is there any way to clone a repository from the web incrementally?有什么方法可以增量地从 Web 克隆存储库? 【发布时间】:2011-06-10 14:43:48 【问题描述】:

我在糟糕的地方拨号(是的,它仍然发生在 2011 年),并试图克隆一个巨大的存储库。它开始时没有问题,但每次拨号断开连接(这似乎是不可避免的)时,!#%$* hg 都会回滚所有内容,我再次留下一个空目录。

除了在远程 PC 上进行,然后通过 FTP 或其他方式下载整个内容之外,还有其他解决方案吗?

【问题讨论】:

这取决于您对 repo 的访问权限,但在某些情况下rsync 是一个选项。 rsync 绝对是这里的必经之路。无论重启多少次,您都将获得最少的冗余文件传输和有保证的结果。 【参考方案1】:

在类似 bash 的 shell 中,您可以执行以下操作:

$ hg init myclone
$ cd myclone
$ for REV in `seq 10 10 100` ; do hg pull -r $REV <REMOTEREPO>; done

从 10 开始,每次拉取下载接下来的 10 个修订版,最多 100 个。如果连接丢失,请将第一个参数调整为 seq 以匹配您已经拉取的内容。

【讨论】:

或在 Windows 命令提示符下:FOR /L %A IN (10,10,100) do hg pull -r %A &lt;REMOTEREPO&gt; 尽管您需要注意,如果您这样做,变更集编号可能与上游存储库不同。 我尝试进一步推动它,目前维护一个(新的)回购,以防我们中的多个人有同样的问题:请尝试贡献? :D github.com/nootanghimire/hg-clone-bash【参考方案2】:

根据您的连接不稳定程度,有两种执行初始克隆的选项。

首先,您可以尝试所谓的“流式克隆”。这些可以最大程度地缩短第一个字节的时间,但通常需要传输更多数据。

以下是如何进行流式克隆:

$ hg clone --uncompressed https://~~~~

您的第二个选项将是 hg clone --rev 操作,然后是一些增量拉取。这类似于在遥远的过去克隆存储库并偶尔进行更新。

$ hg clone --rev 5 https://~~~~

【讨论】:

【参考方案3】:

根据这里的建议,

我创建了一个执行此操作的存储库。

https://github.com/nootanghimire/hg-clone-bash

它已针对单个 repo 进行了优化,但我想您可以分叉并处理它! :)

【讨论】:

以上是关于有啥方法可以增量地从 Web 克隆存储库?的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以将所有 git 分支变成存储库的文件夹?

有啥方法可以克隆 HTML5 画布元素及其内容?

git:存储库会自然膨胀吗?有啥好的做法可以缓解这种情况

markdown [操作方法]使用GitHub Desktop克隆并提交到Bitbucket存储库,就像使用任何GitHub存储库一样。 (苹果电脑)

创建新的 mercurial 存储库克隆 SINCE 修订版

无法通过 http 克隆 mercurial (hg) 存储库