Как мне клонировать большой Git-репозиторий на ненадежном соединении? - PullRequest
27 голосов
/ 14 февраля 2012

Я хочу клонировать LibreOffice.На официальном сайте написано вот что:

Весь наш исходный код размещен в git:

Клон: $ git clone git://anongit.freedesktop.org/libreoffice/core # (просмотр)

Клон(http): $ git clone http://anongit.freedesktop.org/git/libreoffice/core.git # медленнее

Тарбалы: http://download.documentfoundation.org/libreoffice/src/

пожалуйста, найдите последние версии (обычно в нижней части)

сейчас, когда янапишите эту команду в git bash для клонирования, она начнет получать.Но хранилище настолько велико, что после нескольких часов я теряю соединение на несколько секунд, оно откатывает загрузку, и я ничего не получаю.

Можно ли как-нибудь плавно загрузить хранилище, даже если происходят прерывания?

PS Я новый пользователь Git и использую 1 МБ DSL-подключение к Интернету.Размер хранилища должен превышать 1 ГБ.

Ответы [ 5 ]

20 голосов
/ 14 февраля 2012

Хранилище доступно через протокол 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
15 голосов
/ 14 февраля 2012

do 'git clone --depth 100' Должен получить последние 100 коммитов

5 голосов
/ 11 июля 2018

Вы можете сделать следующее:

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

Первый clone все еще будет атомарным, поэтому, если ваше соединение недостаточно надежно для извлечения текущей HEAD, у вас будут проблемы.

Последующий fetch должен быть инкрементным и повторным, если соединение разорвано на полпути.

1 голос
/ 31 декабря 2014

Я использовал свой сервер веб-хостинга с доступом к оболочке, чтобы сначала его клонировать, а затем использовал rsync для локального копирования.При возобновлении rsync будет копировать только оставшиеся файлы.

0 голосов
/ 01 февраля 2019

Лучший из известных мне методов - это объединить функцию неглубокий клон (--depth 1) с разреженной проверкой , которая проверяет только те подпапки или файлы, которые вам нужны. (Мелкое клонирование также подразумевает --single-branch, что также полезно.) См. ответ Удондана для примера.

Кроме того, я использую цикл 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 в Китае ...

Важно отметить, что, потянув таким образом, вы все равно сможете толкать.

...