Как завершить клон git для большого проекта на неустойчивом соединении?

Я пытаюсь git клонировать базу данных LibreOffice, но на данный момент у меня есть подключение к интернету около 300 кбит/с, и это просто ничего, кроме стабильного. Я могу получить соединение в любой момент, но затем процесс клонирования git уже перестает работать, и он не сможет запустить его снова. Есть ли способ получить более отказоустойчивый git клон скачать?

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

Ответ 1

Я не думаю, что это уже готово. Там есть старая страница GSoC, на которой планируется реализовать желаемую функцию. Мой лучший выбор, как вы предложили скачать его в качестве каталога. Я предполагаю, что вы можете возобновить загрузку по другим протоколам.

Перезапускаемый клон

При клонировании большого репозитория (такого как KDE, Open Office, ядро Linux) в настоящее время нет способа перезапустить прерванный клон. Пользователю на конце небольшого канала может потребоваться значительное время для загрузки данных, и если клон прерывается в середине, пользователю в настоящее время необходимо начать сначала и повторить попытку. Для некоторых пользователей это может сделать невозможным клонирование большого хранилища.

Цель: разрешить git-clone автоматически возобновить ранее неудачную загрузку по собственному протоколу git://. Язык: C Наставник: Шон Пирс Предложил: Шон Пирс на Гмане


Обновить

Наряду с предложением мелкого клонирования (git clone --depth=1) в одном из других ответов может быть полезно, если кто-то может сделать для вас пустой репозиторий, если вы сможете общаться с поставщиком. Вы можете легко преобразовать пустой репозиторий в полный репозиторий. Также прочитайте комментарии в этом ответе, поскольку мелкий клон не всегда может помочь.

Ответ 2

Два решения (а точнее обходные пути), которые приходят на ум, следующие:

  • Используйте мелкий клон, т.е. git clone --depth=1, затем углубите этот клон, используя git fetch --depth=N, с увеличением N. Вы можете использовать git fetch --unshallow (начиная с 1.8.0.3), чтобы загрузить все оставшиеся версии.

  • Попросите кого-нибудь расслоить до некоторой помеченной версии (см. git -bundle (1) manpage). Сам пакет является обычным файлом, который вы можете скачать любым способом, через HTTP/FTP с поддержкой возобновления, через BitTorrent, через rsync и т.д. Вы можете создать клон из пакета, исправить конфигурацию и делать дальнейшие выборки из официального репозитория LibreOffice.

Ответ 3

Этот метод использует сторонний сервер.

Сначала сделаем git clone --bare, тогда rsync -v -P -e ssh [email protected]:repo.git . Вы можете использовать msys под Windows.

Ответ 4

Вы можете "загрузить чужую директорию .git", но с тем, что кто-то еще является официальным репозиторием. Репозитории LibreOffice доступны через http, например, их build.git находится в http://anongit.freedesktop.org/git/libreoffice/build.git/ (см. http://cgit.freedesktop.org/libreoffice/ для полного списка, http-адрес находится внизу каждой страницы репозитория).

То, что вы видите на этих http-адресах, является не чем иным, как каталогом .git (фактически "голым" репозиторием, который имеет только то, что вы найдете в каталоге .git). Это тот же каталог, который будет читать сервер для протокола git:// (git daemon). Если вы сделаете копию этих каталогов с веб-загрузчиком (например, wget -m -np), вы можете клонировать свою копию, и она будет работать так же, как если бы вы клонировали непосредственно из репозитория http.

Итак, что вы можете сделать, это: для каждого репозитория получить его копию с помощью своего любимого веб-загрузчика (который будет решать все проблемы с возобновлением сломанных загрузок) и клонировать из этой копии. Когда вы хотите обновить, снова используйте свой любимый веб-загрузчик, чтобы обновить свою копию и извлечь из этой копии. Теперь ваши клоны и обновления так же устойчивы к плохим соединениям, что и ваш любимый веб-загрузчик.

Ответ 5

" Никогда не недооценивайте полосу пропускания голубя-носителя и пучок карт SD" будет современной формой этого ответа. Тар это, просто старый cp -a он, что угодно, и почта проклятая вещь. Найдите кого-то, желающего занять две минуты своего времени, чтобы опустить флэш-накопитель в SASE. Найдите контакт, там они могут даже сделать это за вас.

Ответ 6

Позвольте разбить git clone на его составные части и используйте git reset для предотвращения повторной загрузки файлов.

Когда git clone запускается, первые несколько вещей, которые он делает, эквивалентны

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

Если вы выполнили вышеупомянутые шаги вручную, и предполагая, что они выполнены правильно, теперь вы можете выполнить следующее столько раз, сколько необходимо:

git checkout --force <branch>

Обратите внимание, что он будет извлекать все файлы при каждом запуске, но вам не придется повторно загружать файлы, что может сэкономить вам массу времени.

Ответ 7

Если у вас есть доступ к стороннему серверу, вы можете клонировать его и затем копировать.

Ответ 8

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

Ответ 9

Эта проблема тоже меня укусила. В моем случае есть обход. Он может или не может применяться в вашем случае.

Я иногда использую мобильный телефон для запуска операций git в удаленной системе. Если мои разрывы wi-fi, конечно, заканчиваются, а git отбрасывает всю операцию клонирования без восстановления. Но поскольку подключение к Интернету из моей удаленной системы в мастер git прочное, нет необходимости останавливать клон. Все, что мне нужно - это здравый смысл, чтобы отделить клон от сеанса терминала. Это можно сделать, используя screen/tmux или nohup/daemon. Так что это сбой для жизни в моем случае.

Ответ 10

Используйте CNTRL Z, чтобы остановить клонирование. Не закрывайте терминал, вставьте систему/ноутбук в спящий режим, а затем продолжайте позже командой fg. Сегодня я столкнулся с этой проблемой, пытаясь клонировать репо frm github. Для меня это было время.

Ответ 11

Основываясь на ответах на основе клона/глубины - несколько строк bash легко справляются с этим...

git clone --depth=1 [email protected]:/var/git/whatever.git <directory> cd <directory> for m in `seq 1 100`;do git fetch --depth=$m;done

Ответ 12

Используйте прокси-сервер git, например ngitcached или git-proxy.

Ответ 13

Вы можете попытаться использовать mercurial с расширением hg- git.

Если это не сработает, вы можете использовать git fetch <commit-id> для извлечения только частей удаленного репозитория git (вы можете получить в пустой репозиторий git, нет необходимости создавать его с помощью клона). Но при использовании этого подхода вы можете исправить конфигурацию ветки (= создать локальные и удаленные ветки отслеживания).

Ответ 14

если мы предположим, что у сервера хорошая полоса пропускания (а у вас есть сервер), то другой ответ:

  1. создайте свой собственный сервер с помощью Git Wrapper на стороне сервера
  2. клонировать его на вашем сервере
  3. Zip это с помощью серверного Zip Archiver 's
  4. загрузите его с и с поддержкой возобновления на стороне сервера

но это работает только с очень простым опытом веб-разработки;) а также вам нужен git.exe в вашем git.exe

Ответ 15

Та же проблема здесь - у меня очень слабое интернет-соединение со скоростью не более 10-15 кбит/с: -P

Для меня способ wget работал очень хорошо. Перейдите на сайт репозитория, где находится зеленая кнопка "клонировать или скачать", кликните по ней и скопируйте ссылку опции загрузки ZIP.

Затем вставьте ссылку на команду wget:
wget -c -m -np https://github.com/your/repository/archive/master.zip

Работает как шарм...

Ответ 16

Я хотел бы поставить свои 5 центов здесь. Это действительно то, что помогло мне решить эту проблему

  • выключить сжатие
  • увеличить http.postBuffer
  • сделать частичный клон
  • перейдите в клонированный каталог и получите остальную часть клона
  • потяните остальные
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

Это помогло мне клонировать ~ 3ГБ репо по 8-мегабитному каналу ADSL, конечно, мне приходилось выполнять выборку и извлечение несколько раз, но все же...

Ответ 17

лучший обходной путь, который работал для меня:

Я столкнулся с той же проблемой с плохим подключением к Интернету. Поэтому я пришел к следующему решению:

На моем сервере создан небольшой файл 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 файл, используя любой менеджер загрузок, который поддерживает резюме