我正在尝试克隆LibreOffice代码库,但目前我有一个大约300kbps的互联网连接,它只是稳定的东西。我可以随时获取连接,但随后git clone进程已经停止工作,无法让它再次运行。有没有办法让更多的抗故障git克隆下载?
我认为自己的一个选择是下载其他人的.git目录,但这完全依赖于其他目录,对我来说似乎不是最好的解决方案。
答案 0 :(得分:111)
我想到的两个解决方案(或者更确切地说是 解决方法 )是:
使用浅层克隆即git clone --depth=1
,然后使用git fetch --depth=N
加深此克隆,增加 N 。您可以使用git fetch --unshallow
(自1.8.0.3起)下载所有剩余的修订版。
要求某人捆绑一些标记版本(请参阅git-bundle(1)联构帮助页)。捆绑包本身是一个普通的文件,您可以通过HTTP / FTP以及简历支持,通过BitTorrent,通过rsync等以任何方式下载。您可以从捆绑包创建克隆,修复配置,并从官方LibreOffice存储库进一步提取
答案 1 :(得分:65)
我认为这还没有准备好。有an old GSoC page计划实现您想要的功能。我最好的选择是,像你建议的那样将其下载为目录。我假设你能够通过其他协议恢复下载。
可重新启动的克隆
克隆大型存储库时(例如 作为KDE,Open Office,Linux内核) 目前无法重启 一个中断的克隆。可能需要 用户在相当长的时间 下载一个小管道的结尾 数据,以及克隆是否被中断 在用户当前需要的中间 从头开始重新开始 再试一次。对于一些用户,这可能 无法克隆一个大的 库中。
目标:自动允许git-clone 恢复以前失败的下载 在本机git://协议上。 语言:C导师:Shawn Pearce 建议者:肖恩 Pearce on gmane
除了其他一个答案中的浅层克隆(git clone --depth=1
)建议之外,如果您可以与提供商进行通信,那么有人可以为您创建一个裸存储库可能会有所帮助。您可以轻松地convert裸存储库到完整存储库。同时阅读该答案中的评论,因为浅层克隆可能并不总是有帮助。
答案 2 :(得分:13)
此方法使用第三方服务器。
首先,做
那么git clone --bare
rsync -v -P -e ssh user@host:repo.git .
您可以在Windows下使用msys。
答案 3 :(得分:9)
您可以“下载其他人的.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下载程序(它将处理恢复损坏的下载的所有问题)获取它的副本,并从该副本克隆。如果要更新,请再次使用您喜欢的网络下载程序来更新您的副本,并从该副本中提取。现在,您的克隆和更新与您最喜欢的网络下载器的不良连接一样耐用。
答案 4 :(得分:8)
“Never underestimate the bandwidth of a carrier pigeon and a bundle of SD cards”将成为这个答案的现代形式。把它抬起来,简单的cp -a
它,无论如何,并邮寄该死的东西。找一个愿意花两分钟时间将拇指驱动器放入SASE的人。找到一个联系人,在那里,他们甚至可以为你做。
答案 5 :(得分:4)
如果您有权访问第三方服务器,则可以在那里进行克隆,然后复制。
答案 6 :(得分:4)
让我们将git clone
分解为其组成部分,并使用git reset
来阻止重新下载文件。
当git clone
运行时,它所做的前几件事等同于
git init
git remote add origin <repo_url>
git fetch origin <branch>
如果您手动运行上述步骤,并假设它们已正确完成,您现在可以根据需要多次运行以下步骤:
git checkout --force <branch>
请注意,它会在每次运行时检出所有文件,但您不必重新下载文件,这可能会为您节省大量时间。
答案 7 :(得分:3)
这个问题也让我感到困惑。在我的情况下,有一个解决方法。它可能适用于您的情况,也可能不适用。
我有时会使用手机在远程系统上启动git操作。如果我的wi-fi当然会中断,会话结束并且git会丢弃整个克隆操作而不会恢复。但是,由于从我的远程系统到git master的互联网连接很稳定,所以克隆不需要停止。我需要的只是将克隆从终端会话中分离出来的常识。这可以通过使用screen / tmux或nohup / daemon来完成。所以在我的案例中它是一个实时软件故障。
答案 8 :(得分:3)
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
答案 9 :(得分:2)
增加缓冲区大小将帮助您解决此问题。只需按照步骤操作即可。
打开终端或Git Bash,然后用cd
转到要克隆存储库的位置。
将压缩率设置为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>
等待克隆完成。
答案 10 :(得分:2)
基于克隆/基于深度的答案 - 几行bash可以轻松完成...
git clone --depth=1 something@somegit.com:/var/git/whatever.git <directory>
cd <directory>
for m in `seq 1 100`;do git fetch --depth=$m;done
答案 11 :(得分:2)
使用CNTRL Z停止克隆。不要关闭终端,让系统/笔记本电脑处于休眠状态,然后通过fg命令继续。 我在尝试克隆一个repo frm github时遇到了同样的问题。这对我来说是节省时间的。
答案 12 :(得分:1)
使用git代理,例如ngitcached或git-proxy。
答案 13 :(得分:0)
如果我们假设服务器具有良好的带宽(并且您有服务器),则另一个答案是:
但这仅适用于非常基本的Web开发经验;)
而且你的服务器中还需要git.exe
答案 14 :(得分:0)
这里有同样的问题-我的互联网连接非常不稳定,通常不超过10-15 kb / sec :-P
对我来说,wget的方法效果很好。 转到绿色的“克隆或下载”按钮所在的存储库站点,单击它并复制ZIP下载选项的链接。
然后插入指向wget命令的链接:
wget -c -m -np https://github.com/your/repository/archive/master.zip
像魅力一样工作...
答案 15 :(得分:0)
我想把我的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的存储库,当然我必须执行提取操作并提取几次,但仍然...
答案 16 :(得分: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文件
答案 17 :(得分:0)
您可以尝试将mercurial与hg-git扩展名一起使用。
如果这不起作用,您可以使用git fetch <commit-id>
仅获取远程git存储库的一部分(您可以获取到空的git存储库,不需要使用clone创建它)。但是,当您使用此方法时,您可能会更正分支配置(=创建本地和远程跟踪分支)。