Как скопировать большой репозиторий 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 ГБ.
Ответы
Ответ 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 в Китае...
Важно отметить, что, потянув таким образом, вы все равно сможете толкать.