如何在一个不稳定的连接上完成一个大项目的git clone?

我试图克隆LibreOffice代码库,但目前我有一个约300kbps的互联网连接,它只是稳定的东西。 我可以随时获得连接,但是git克隆进程已经停止工作,没办法让它再次运行。 有没有办法有更多的抗失败git克隆下载?

我认为我自己的一个select是下载其他人的.git目录,但这是过分依赖他人,似乎并不是最好的解决scheme。

我不认为这是准备好了。 有一个旧的GSoC页面 ,计划实现您所需的function。 我最好的select就是像你build议的那样下载它作为一个目录。 我假设你可以通过其他协议恢复下载。

可重新启动的克隆

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

目标:允许git-clone通过本地git://协议自动恢复先前失败的下载。 语言:C导师:肖恩·皮尔斯推荐人:肖恩·皮尔斯格曼


更新

除了克隆( git clone --depth=1 )之外的其他解决scheme中的build议,如果可以与提供者进行通信,那么有人可以为您build立一个裸存储库,这可能会有所帮助。 您可以轻松地将裸仓库转换为完整的仓库。 同时阅读答案中的评论作为浅层克隆可能并不总是帮助。

想到的两个解决scheme(或者更好的解决方法 )是:

  • 使用浅层克隆git clone --depth=1 ,然后使用git fetch --depth=N 加深该克隆,并增加N。 您可以使用git fetch --unshallow (自1.8.0.3)下载所有剩余的修订版本。

  • 要求某人捆绑一些标签发布(参见git-bundle(1)联机帮助页)。 bundle本身就是一个普通的文件,你可以通过HTTP / FTP下载任何方式,通过BitTorrent,通过rsync等,通过HTTP / FTP进行下载。你可以从bundle创build克隆,修改configuration,并进一步从官方的LibreOffice仓库。

此方法使用第三方服务器。

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

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

你在这些http URL中看到的只不过是一个.git目录(实际上是一个“裸”的存储库,它只有你在.git目录中find的)。 这是git://协议( git daemon )将读取的服务器所在的目录。 如果您使用Web下载器(例如wget -m -np )制作这些目录的副本, wget -m -np可以从副本中进行克隆,并且可以直接从http存储库克隆。

因此,您可以做的是:对于每个存储库,使用您最喜爱的web下载器(将处理所有问题以恢复损坏的下载)获取其副本,并从该副本进行克隆。 当你想更新,再次使用您最喜爱的网页下载器来更新您的副本,并从该副本拉。 现在,您的克隆和更新可以抵御不良连接,就像您最喜欢的networking下载器一样。

“ 永远不要低估一只鸽子和一批SD卡的带宽 ”是这个答案的现代forms。 把它放倒,简单的旧的cp -a它,不pipe,并邮寄该死的东西。 找一个愿意花两分钟的时间将一个拇指驱动器放入SASE的人。 find一个联系人,在那里,他们甚至可以为你做。

如果您有权访问第三方服务器,则可以在该处复制并复制。

使用CNTRL Z停止克隆。 不要closuresterminal将系统/笔记本电脑置于hibernate状态,然后再通过fg命令继续。 今天我正面临着同样的问题,试图克隆一个回购frm github。 这对我来说是节省时间的。

 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操作。 如果我的Wi-Fi断了,当然会话结束,git删除整个克隆操作而不恢复。 但是由于从远程系统到git master的互联网连接是稳定的,所以不需要克隆停止。 我所需要的是从terminal会话中分离克隆的常识。 这可以通过使用screen / tmux或nohup /守护进程来完成。 所以这是我的情况下的一个活件故障。

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

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

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

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

 git reset --hard origin/<branch> 

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

build立在基于克隆/深度的答案 – 几行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

您可以尝试使用hg-git扩展名的mercurial。

如果这样做不起作用,你可以使用git fetch <commit-id>来获取远程git仓库的一部分(你可以获取一个空的git仓库,不需要用clone创build)。 但是,当你使用这种方法时,你可能会纠正分支configuration(=创build本地和远程跟踪分支)。

使用git代理,如ngitcached或git-proxy 。