Как завершить клон 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
если мы предположим, что у сервера хорошая полоса пропускания (а у вас есть сервер), то другой ответ:
- создайте свой собственный сервер с помощью Git Wrapper на стороне сервера
- клонировать его на вашем сервере
- Zip это с помощью серверного Zip Archiver 's
- загрузите его с и с поддержкой возобновления на стороне сервера
но это работает только с очень простым опытом веб-разработки;) а также вам нужен 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 файл, используя любой менеджер загрузок, который поддерживает резюме