如何在不可靠的连接上克隆大型Git存储库?

时间:2012-02-13 21:33:28

标签: git bash clone git-clone

我想克隆LibreOffice。从官方网站上可以看出:

  

我们所有的源代码都托管在git中:

     

克隆:$ git clone git://anongit.freedesktop.org/libreoffice/core#(浏览)

     

克隆(http):$ git clone http://anongit.freedesktop.org/git/libreoffice/core.git #thlow

     

Tarballs:http://download.documentfoundation.org/libreoffice/src/

     

请找到最新版本(通常在底部附近)

现在,当我在git bash中编写此命令进行克隆时,它会开始提取。但是存储库是如此之大,以至于几小时后我会失去连接几秒钟,它会回滚下载,但我什么都没得到。

即使发生中断,我是否可以顺利下载存储库?

P.S。我是Git的新用户,我使用1 MB DSL互联网连接。存储库必须超过1 GB。

6 个答案:

答案 0 :(得分:20)

可以通过http协议(又名哑协议)访问存储库:http://anongit.freedesktop.org/git/libreoffice/core.git

您可以使用wget或其他下载管理器下载所有内容,您将拥有该存储库的克隆。之后,将目录从core.git重命名为.git,并使用以下命令告诉git有关远程URL的信息:

$ git remote add remote http://anongit.freedesktop.org/git/libreoffice/core.git
$ git reset --hard HEAD

答案 1 :(得分:15)

做'git clone --depth 100' 它应该抓住最后100次提交

答案 2 :(得分:5)

您可以执行以下操作:

git clone --depth 1 git@github.com:User/Project.git .
git fetch --unshallow

第一个clone仍然是原子的,因此,如果您的连接不够可靠,无法获取当前的HEAD,那么您将遇到麻烦。

如果连接中途断开,随后的fetch应该是增量的并且可以重试。

答案 3 :(得分:1)

我使用具有shell访问权限的我的Web托管服务器首先克隆它,然后使用rsync在本地复制它。 rsync将在恢复时仅复制剩余的文件。

答案 4 :(得分:1)

增加缓冲区大小,以便git可以正确利用您的带宽。使用以下命令。

git config --global core.compression 0

git config --global http.postBuffer 1048576000

git config --global http.maxRequestBuffer 100M

git clone <repo url>

等待克隆完成。

答案 5 :(得分:0)

我所知道的最好的方法是将shallow clone--depth 1)功能与sparse checkout结合使用,即仅签出所需的子文件夹或文件。 (浅克隆也意味着--single-branch,这也很有用。)有关示例,请参见udondan's answer

此外,我使用bash循环继续重试,直到成功完成。像这样:

#!/bin/bash

git init <repo_dir>
cd <repo_dir>
git remote add origin <repo_url>

# Optional step: sparse checkout
git config core.sparsecheckout true                     # <-- enable sparse checkout
echo "subdirectory/*" >> .git/info/sparse-checkout      # <-- specify files you need

# Keep pulling until successful
until $( git pull --depth=1 origin master ); do         # <-- shallow clone
    echo "Pulling git repository failed; retrying..."
done

通过这种方式,即使在中国使用慢速VPN,我最终也可以提取大型存储库...

重要的是,通过这种方式拉动,您仍然可以推动。