我试图git克隆LibreOffice代码库,但目前我有一个大约300kbps的互联网连接,它只是什么都不稳定。我可以在任何时候恢复连接,但是git克隆进程已经停止工作,没有办法让它再次运行。有没有什么方法可以让git克隆下载更具抗失败性?
我自己考虑的一个选择是下载别人的.git目录,但这过于依赖他人,对我来说似乎不是最好的解决方案。
如果你可以访问第三方服务器,你可以克隆那里,然后复制。
我觉得这个还没准备好。有旧的GSoC页面计划实现你想要的功能。我最好的办法是,像你建议的那样把它下载成一个目录。我假设你能够通过其他协议恢复下载。
可重新开始的克隆 当克隆一个大型存储库(例如 如KDE, Open Office, Linux内核) 目前无法重新启动 一个中断的克隆。这可能需要 对于用户来说相当长的时间 末端的一个小管道下载 数据,克隆是否中断 中间是用户当前需要的 从头再来,然后 再试一次。对于某些用户来说,可能是这样 使它不可能克隆一个大 库。< / p > 目标:允许git-clone自动 恢复以前失败的下载 通过本地git://协议。 语言:C导师:肖恩·皮尔斯 建议:Shawn Pearce on gmane
可重新开始的克隆
当克隆一个大型存储库(例如 如KDE, Open Office, Linux内核) 目前无法重新启动 一个中断的克隆。这可能需要 对于用户来说相当长的时间 末端的一个小管道下载 数据,克隆是否中断 中间是用户当前需要的 从头再来,然后 再试一次。对于某些用户来说,可能是这样 使它不可能克隆一个大 库。< / p >
目标:允许git-clone自动 恢复以前失败的下载 通过本地git://协议。 语言:C导师:肖恩·皮尔斯 建议:Shawn Pearce on gmane
随着浅克隆(git clone --depth=1)建议在其他答案之一,如果有人可以为你做一个裸库,如果你可以与提供者沟通,这可能是有帮助的。你可以很容易地转换裸仓库到一个完整的仓库。另外,请阅读答案中的评论,因为肤浅的克隆可能并不总是有帮助。
git clone --depth=1
您可以尝试在hg-git扩展中使用mercurial。
如果这不起作用,你可以使用git fetch <commit-id>来获取远程git存储库的一部分(你可以获取一个空的git存储库,没有必要使用clone来创建它)。但是当您使用这种方法时,您可能需要纠正分支配置(=创建本地和远程跟踪分支)。
git fetch <commit-id>
想到的两个解决方案(更确切地说是< em >工作区< / em >)是:
使用浅克隆即git clone --depth=1,然后使用git fetch --depth=N使用加深此克隆,增加N。您可以使用git fetch --unshallow(自1.8.0.3起)下载所有剩余的修订版本。
git fetch --depth=N
git fetch --unshallow
询问某人bundle到一些标记的发布(参见git-bundle(1) manpage)。bundle本身是一个普通的文件,你可以通过任何方式下载,通过HTTP/FTP支持恢复,通过BitTorrent,通过rsync等等。你可以从bundle中创建克隆,修复配置,并从官方的LibreOffice存储库中进一步获取。
你可以“下载其他人的.git目录”,但是这个其他人就是官方的存储库本身。LibreOffice存储库可以通过http获取,例如它们的build.git位于http://anongit.freedesktop.org/git/libreoffice/build.git/(完整列表请参阅http://cgit.freedesktop.org/libreoffice/, http URL位于每个存储库页面的底部)。
build.git
你在这些http url中看到的只不过是一个.git目录(实际上是一个“裸”存储库,其中只有你在.git目录中找到的内容)。它是服务器为git://协议(git daemon)读取的相同目录。如果你用网络下载器(例如wget -m -np)复制了这些目录,你可以从你的拷贝中克隆,它会像你直接从http存储库中克隆一样工作。
.git
git://
git daemon
wget -m -np
所以,你可以做的是:对于每个存储库,用你最喜欢的网络下载器获取它的副本(它将处理恢复失败下载的所有问题),并从该副本克隆。当你想要更新时,再次使用你最喜欢的网络下载器来更新你的副本,并从该副本中提取。现在你的克隆和更新就像你最喜欢的网络下载器一样抵抗坏连接。
这个问题也困扰着我。对我来说,有一个变通办法。它可能适用于你,也可能不适用。
我有时会使用手机在远程系统上启动git操作。如果我的wi-fi断了,会话当然会结束,git会放弃整个克隆操作而不恢复。但是由于从我的远程系统到git master的互联网连接是可靠的,所以没有必要让克隆停止。我所需要的只是从终端会话分离克隆的常识。这可以通过使用screen/tmux或nohup/daemon来完成。所以在我的情况下,这是一个生活设备故障。
该方法使用第三方服务器。
git clone --bare
rsync -v -P -e ssh user@host:repo.git .
使用CNTRL Z停止克隆。不要关闭终端,让系统/笔记本电脑处于休眠状态,然后稍后使用fg命令继续。 我今天在试图从github克隆一个回购时也面临着同样的问题。
"永远不要低估一只信鸽和一捆SD卡的带宽"是这个答案的现代形式。把它涂上沥青,普通的cp -a,不管怎样,然后把这该死的东西寄出去。找一个愿意花两分钟时间把u盘放进SASE的人。在那里找个联系人,他们甚至可以帮你。
cp -a
使用一个git代理,比如ngitcached或git-proxy。
git clone --depth <Number> <repository> --branch <branch name> --single-branch
这个命令帮助我(感谢尼古拉保鲁西)
例如
git clone --depth 1 https://github.com/gokhanmoral/siyahkernel3 --branch ics --single-branch
让我们把git clone分解成它的组成部分,并使用git checkout来防止重新下载文件。
git clone
git checkout
当git clone运行时,它所做的前几件事等价于
git init git remote add origin <repo_url> git fetch origin <branch>
如果您手动运行上述步骤,并假设它们正确完成,您现在可以根据需要多次运行以下步骤:
git checkout --force <branch>
注意,每次运行时它都会检出所有文件,但是您将不必重新下载文件,这可能会节省你大量的时间。
如果我们假设服务器有良好的带宽(并且你有一个服务器),另一个答案是:
,但这只适用于非常基本的web开发经验;) 并且你还需要在你的服务器中git.exe
git.exe
同样的问题-我有一个非常脆弱的互联网连接,通常不超过10-15 kb/秒:- p
对我来说,wget方法非常有效。
转到存储库站点,那里有绿色按钮“克隆或下载”;是,单击它并复制ZIP下载选项的链接。
然后插入到wget命令的链接:
wget
wget -c -m -np https://github.com/your/repository/archive/master.zip
工作起来很有魅力……
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的repo,当然我必须执行取回和拉几次,但仍然…
对我来说最有效的解决方法是:
我也遇到过同样的问题,因为网络连接不好。所以我想出了以下解决方案:
我在服务器上创建了一个小的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文件。
增加缓冲区大小将有助于解决这个问题。按照步骤做就可以了。
打开终端或Git Bash,并使用cd去到你想克隆repo的位置。
cd
设置压缩值为0
git config --global core.compression 0
设置postBuffer大小
postBuffer
git config --global http.postBuffer 1048576000
设置maxRequestBuffer大小
maxRequestBuffer
git config --global http.maxRequestBuffer 100M
git clone <repo url>
等待克隆完成