227

我正在尝试 git 克隆 LibreOffice 代码库,但目前我的互联网连接速度约为 300kbps,而且还很不稳定。我可以随时恢复连接,但是 git clone 进程已经停止工作,无法让它再次运行。有什么方法可以让 git clone 下载更抗故障吗?

我认为自己的一个选择是下载其他人的 .git 目录,但这过于依赖他人,对我来说似乎不是最好的解决方案。

4

17 回答 17

153

想到的两个解决方案(或者更确切地说是解决方法)是:

  • 使用浅克隆ie git clone --depth=1,然后使用加深这个克隆git fetch --depth=N,随着N的增加。您可以使用git fetch --unshallow(从 1.8.0.3 开始)下载所有剩余的修订版本。

  • 要求某人捆绑一些标记的版本(参见git-bundle(1)手册页)。捆绑包本身是一个普通文件,您可以通过任何方式下载它,通过支持恢复的 HTTP/FTP、通过 BitTorrent、通过 rsync 等。您可以从捆绑包创建克隆,修复配置,并从官方 LibreOffice 存储库进行进一步获取.

于 2010-10-18T09:07:12.733 回答
78

我认为这还没有准备好。有一个旧的 GSoC 页面计划实现您想要的功能。我最好的选择是,就像您建议的那样将其下载为目录。我假设您能够通过其他协议恢复下载。

可重启克隆

克隆大型存储库(例如 KDE、Open Office、Linux 内核)时,目前无法重新启动中断的克隆。小管道末端的用户下载数据可能需要相当长的时间,如果克隆在中间中断,用户当前需要从头开始并重试。对于某些用户来说,这可能会导致无法克隆大型存储库。

目标:允许 git-clone 通过本机 git:// 协议自动恢复先前失败的下载。语言:C 导师:Shawn Pearce 建议人:Shawn Pearce on gmane


更新

除了git clone --depth=1其他答案之一中的浅层克隆(您可以轻松地裸存储库转换为完整存储库。另请阅读该答案中的评论,因为浅克隆可能并不总是有帮助。

于 2010-10-17T19:28:09.323 回答
16

此方法使用 3rd 方服务器。

首先,做 git clone --bare,然后 rsync -v -P -e ssh user@host:repo.git . 你可以在Windows下使用msys。

于 2012-09-25T10:54:54.670 回答
14

永远不要低估信鸽和一捆 SD 卡的带宽”将是这个答案的现代形式。把它涂上焦油cp -a,不管它是什么,然后把这该死的东西寄出去。找一个愿意花两分钟时间将拇指驱动器放入 SASE 的人。在那里找一个联系人,他们甚至可能会为你做这件事。

于 2013-11-13T00:44:49.233 回答
11

您可以“下载其他人的 .git 目录”,但其他人本身就是官方存储库。LibreOffice 存储库可通过 http 获得,例如它们build.git位于http://anongit.freedesktop.org/git/libreoffice/build.git/(请参阅http://cgit.freedesktop.org/libreoffice/以获取完整列表, http URL 位于每个存储库页面的底部)。

您在这些 http URL 上看到的只不过是一个.git目录(实际上是一个“裸”存储库,它只包含您在.git目录中可以找到的内容)。它与git://协议 ( git daemon) 的服务器将读取的目录相同。如果您使用 Web 下载器(例如wget -m -np)制作这些目录的副本,您可以从您的副本中克隆,它的工作原理与您直接从 http 存储库中克隆时一样。

因此,您可以做的是:对于每个存储库,使用您最喜欢的 Web 下载器获取它的副本(它将处理恢复中断下载的所有问题),然后从该副本克隆。当您想要更新时,再次使用您最喜欢的网络下载器来更新您的副本,然后从该副本中提取。现在,您的克隆和更新可以像您最喜欢的网络下载器一样抵抗不良连接。

于 2011-06-12T21:14:14.603 回答
8

我想把我的 5 美分放在这里。这实际上是帮助我解决这个问题的原因

  • 关闭压缩
  • 增加http.postBuffer
  • 进行部分克隆
  • 导航到克隆的目录并获取克隆的其余部分
  • 拉其余的
git config --global core.compression 0
git config --global https.postBuffer 524288000
git clone  <your_git_http_url_here> --depth 1
git fetch --unshallow 
git pull --all

这帮助我通过 8Mbps adsl 连接克隆了 ~3GB 存储库,当然我必须执行几次获取和拉取,但仍然......

于 2019-04-19T07:47:56.940 回答
7

增加缓冲区大小将帮助您解决这个问题。只需按照步骤操作即可。

  1. 打开终端或 Git Bash,然后cd转到要克隆 repo 的位置。

  2. 将压缩设置为 0

    git config --global core.compression 0
    
  3. 设置postBuffer大小

    git config --global http.postBuffer 1048576000
    
  4. 设置maxRequestBuffer大小

    git config --global http.maxRequestBuffer 100M
    
  5. 现在开始克隆

    git clone <repo url>
    
  6. 等待克隆完成。

于 2020-05-19T12:19:06.940 回答
6
git clone --depth <Number> <repository> --branch <branch name> --single-branch

这个命令帮助我(感谢Nicola Paolucci

例如

git clone --depth 1 https://github.com/gokhanmoral/siyahkernel3 --branch ics  --single-branch
于 2014-10-21T14:12:29.120 回答
6

让我们分解git clone成它的组成部分,并使用它git checkout来防止重新下载文件。

运行时git clone,它所做的前几件事相当于

git init
git remote add origin <repo_url>
git fetch origin <branch>

如果您手动运行上述步骤,并假设它们正确完成,您现在可以根据需要多次运行以下命令:

git checkout --force <branch>

请注意,它会在每次运行时检查所有文件,但您不必重新下载文件,这可能会为您节省大量时间。

于 2017-09-08T02:09:18.557 回答
5

如果您有权访问第 3 方服务器,则可以在那里克隆然后复制。

于 2010-10-17T19:26:37.387 回答
4

使用 git 代理,例如ngitcachedgit-proxy

于 2014-07-31T21:31:19.473 回答
3

这个问题也困扰着我。就我而言,有一种解决方法。它可能适用于您的情况,也可能不适用。

我有时会使用手机在远程系统上启动 git 操作。如果我的 wi-fi 中断当然会话结束并且 git 放弃整个克隆操作而没有恢复。但是由于从我的远程系统到 git master 的互联网连接是可靠的,所以克隆不需要停止。我所需要的只是将克隆从终端会话中分离出来的常识。这可以通过使用 screen/tmux 或 nohup/daemon 来完成。所以在我的情况下这是一个活件故障。

于 2012-07-14T16:47:32.293 回答
2

使用 CNTRL Z 停止克隆。不要关闭终端,让系统/笔记本电脑进入休眠状态,然后通过 fg 命令继续。我今天在尝试克隆 repo frm github 时遇到了同样的问题。这为我节省了时间。

于 2013-10-26T19:17:14.427 回答
1

同样的问题 - 我的互联网连接非常不稳定,通常不超过 10-15 kb/秒 :-P

对我来说,wget 方式效果很好。

转到绿色按钮“克隆或下载”所在的存储库站点,单击它并复制 ZIP 下载选项的链接。

然后插入wget命令的链接:

wget -c -m -np https://github.com/your/repository/archive/master.zip

奇迹般有效...

于 2018-10-02T07:53:53.323 回答
0

对我有用的最佳解决方法:

我遇到了同样的问题,互联网连接不好。所以我想出了以下解决方案:

我在我的服务器上创建了一个小 php 文件以将包下载为 zip 文件:

<?php
$url = "https://codeload.github.com/CocoaPods/Specs/zip/master";
file_put_contents("coco.zip", fopen($url, 'r'));
?>  

<a href="coco.zip">coco.zip</a>

然后使用任何支持恢复的下载管理器下载 zip 文件。

于 2019-07-26T07:51:42.030 回答
0

如果我们假设服务器具有良好的带宽(并且您有服务器),那么另一个答案是:

  1. 使用 Server-Side Git Wrapper创建自己的服务器
  2. 将其克隆到您的服务器中
  3. 使用 Server-Side Zip Archiver压缩它
  4. 从服务器端简历支持下载它

但这仅适用于非常基本的 Web 开发经验;)而且您git.exe在服务器中也需要

于 2018-03-12T04:57:26.597 回答
-1

您可以尝试将 mercurial 与 hg-git 扩展一起使用。

如果这不起作用,您可以使用git fetch <commit-id>仅获取远程 git 存储库的一部分(您可以获取到空的 git 存储库,无需使用克隆创建它)。但是当您使用这种方法时,您可能会更正分支配置(=创建本地和远程跟踪分支)。

于 2010-10-18T08:33:40.150 回答