我正在尝试 git 克隆 LibreOffice 代码库,但目前我的互联网连接速度约为 300kbps,而且还很不稳定。我可以随时恢复连接,但是 git clone 进程已经停止工作,无法让它再次运行。有什么方法可以让 git clone 下载更抗故障吗?
我认为自己的一个选择是下载其他人的 .git 目录,但这过于依赖他人,对我来说似乎不是最好的解决方案。
想到的两个解决方案(或者更确切地说是解决方法)是:
使用浅克隆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 存储库进行进一步获取.
我认为这还没有准备好。有一个旧的 GSoC 页面计划实现您想要的功能。我最好的选择是,就像您建议的那样将其下载为目录。我假设您能够通过其他协议恢复下载。
可重启克隆
克隆大型存储库(例如 KDE、Open Office、Linux 内核)时,目前无法重新启动中断的克隆。小管道末端的用户下载数据可能需要相当长的时间,如果克隆在中间中断,用户当前需要从头开始并重试。对于某些用户来说,这可能会导致无法克隆大型存储库。
目标:允许 git-clone 通过本机 git:// 协议自动恢复先前失败的下载。语言:C 导师:Shawn Pearce 建议人:Shawn Pearce on gmane
除了git clone --depth=1
其他答案之一中的浅层克隆(您可以轻松地将裸存储库转换为完整存储库。另请阅读该答案中的评论,因为浅克隆可能并不总是有帮助。
此方法使用 3rd 方服务器。
首先,做
git clone --bare
,然后
rsync -v -P -e ssh user@host:repo.git .
你可以在Windows下使用msys。
“永远不要低估信鸽和一捆 SD 卡的带宽”将是这个答案的现代形式。把它涂上焦油cp -a
,不管它是什么,然后把这该死的东西寄出去。找一个愿意花两分钟时间将拇指驱动器放入 SASE 的人。在那里找一个联系人,他们甚至可能会为你做这件事。
您可以“下载其他人的 .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 下载器获取它的副本(它将处理恢复中断下载的所有问题),然后从该副本克隆。当您想要更新时,再次使用您最喜欢的网络下载器来更新您的副本,然后从该副本中提取。现在,您的克隆和更新可以像您最喜欢的网络下载器一样抵抗不良连接。
我想把我的 5 美分放在这里。这实际上是帮助我解决这个问题的原因
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 存储库,当然我必须执行几次获取和拉取,但仍然......
增加缓冲区大小将帮助您解决这个问题。只需按照步骤操作即可。
打开终端或 Git Bash,然后cd
转到要克隆 repo 的位置。
将压缩设置为 0
git config --global core.compression 0
设置postBuffer
大小
git config --global http.postBuffer 1048576000
设置maxRequestBuffer
大小
git config --global http.maxRequestBuffer 100M
现在开始克隆
git clone <repo url>
等待克隆完成。
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
让我们分解git clone
成它的组成部分,并使用它git checkout
来防止重新下载文件。
运行时git clone
,它所做的前几件事相当于
git init
git remote add origin <repo_url>
git fetch origin <branch>
如果您手动运行上述步骤,并假设它们正确完成,您现在可以根据需要多次运行以下命令:
git checkout --force <branch>
请注意,它会在每次运行时检查所有文件,但您不必重新下载文件,这可能会为您节省大量时间。
如果您有权访问第 3 方服务器,则可以在那里克隆然后复制。
使用 git 代理,例如ngitcached或git-proxy。
这个问题也困扰着我。就我而言,有一种解决方法。它可能适用于您的情况,也可能不适用。
我有时会使用手机在远程系统上启动 git 操作。如果我的 wi-fi 中断当然会话结束并且 git 放弃整个克隆操作而没有恢复。但是由于从我的远程系统到 git master 的互联网连接是可靠的,所以克隆不需要停止。我所需要的只是将克隆从终端会话中分离出来的常识。这可以通过使用 screen/tmux 或 nohup/daemon 来完成。所以在我的情况下这是一个活件故障。
使用 CNTRL Z 停止克隆。不要关闭终端,让系统/笔记本电脑进入休眠状态,然后通过 fg 命令继续。我今天在尝试克隆 repo frm github 时遇到了同样的问题。这为我节省了时间。
同样的问题 - 我的互联网连接非常不稳定,通常不超过 10-15 kb/秒 :-P
对我来说,wget 方式效果很好。
转到绿色按钮“克隆或下载”所在的存储库站点,单击它并复制 ZIP 下载选项的链接。
然后插入wget
命令的链接:
wget -c -m -np https://github.com/your/repository/archive/master.zip
奇迹般有效...
对我有用的最佳解决方法:
我遇到了同样的问题,互联网连接不好。所以我想出了以下解决方案:
我在我的服务器上创建了一个小 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 文件。
如果我们假设服务器具有良好的带宽(并且您有服务器),那么另一个答案是:
但这仅适用于非常基本的 Web 开发经验;)而且您git.exe
在服务器中也需要
您可以尝试将 mercurial 与 hg-git 扩展一起使用。
如果这不起作用,您可以使用git fetch <commit-id>
仅获取远程 git 存储库的一部分(您可以获取到空的 git 存储库,无需使用克隆创建它)。但是当您使用这种方法时,您可能会更正分支配置(=创建本地和远程跟踪分支)。