Подтвердить что ты не робот

Как скопировать большой репозиторий Git на ненадежное соединение?

Я хочу клонировать LibreOffice. С официального сайта это то, что написано:

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

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

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

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

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

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

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

P.S. Я новый пользователь git, и я использую интернет-соединение DSL емкостью 1 МБ. Репозиторий должен быть более 1 ГБ.

4b9b3361

Ответ 1

Репозиторий доступен через протокол http (aka dumb protocol) здесь: 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

Ответ 2

do 'git clone --depth 100' Он должен захватить последние 100 совершений

Ответ 3

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

git clone --depth 1 [email protected]:User/Project.git .
git fetch --unshallow

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

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

Ответ 4

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

Ответ 5

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

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

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