Как загрузить большой репозиторий Git?
У меня есть репозиторий GIT на BitBucket, который больше 4 ГБ.
Я не могу клонировать репозиторий, используя обычную команду GIT, поскольку она терпит неудачу (похоже, что она работает долгое время, но затем откат).
Я также не могу загрузить репозиторий как почтовый индекс из интерфейса BitBucket, например:
Feature unavailable This repository is too large for us to generate a download.
Можно ли каким-либо образом загрузить репозиторий GIT?
Ответы
Ответ 1
Я получил его для работы, используя этот метод фатальный: ранний EOF фатальный: index-pack не удалось
Но только после того, как я настроил SSL - этот метод все еще не работал над HTTP.
Поддержка в BitBucket была действительно полезна и указала мне в этом направлении.
Ответ 2
Если вам не нужно тянуть всю историю, вы можете указать количество ревизий для клонирования
git clone <repo_url> --depth=1
Конечно, это может не помочь, если у вас есть очень большой файл в вашем репозитории
Ответ 3
Один потенциальный метод - это просто клонировать одну ветвь. Затем вы можете потянуть более позднее. Сделайте git clone [url_of_remote] --branch [branch_name] --single-branch
.
Большие хранилища кажутся серьезной слабостью с помощью git. Вы можете прочитать об этом в http://www.sitepoint.com/managing-huge-repositories-with-git/. В этой статье упоминается расширение git, называемое git -annex, которое может помочь с большими файлами. Проверьте это на https://git-annex.branchable.com/. Это помогает, позволяя git управлять файлами без проверки файлов на git. Отказ от ответственности, я никогда не пробовал это сам.
Некоторые из решений в Как мне клонировать большой репозиторий git на ненадежном соединении? также могут помочь.
EDIT. Поскольку вы просто хотите файлы, вы можете попробовать git archive
. Вы бы использовали синтаксис как-то вроде
git archive --remote=ssh://[email protected]/username/reponame.git --format=tar --output="file.tar" master
Я попытался протестировать репо на моей учетной записи AWS Codecommit, но, похоже, это не разрешает. Кто-то из BitBucket может протестировать. Обратите внимание, что в Windows вы хотите использовать zip, а не tar, и все это должно выполняться через ssh-соединение, а не https.
Подробнее о git archive
в http://git-scm.com/docs/git-archive
Ответ 4
Для меня это помогло отлично, как описано в этом ответе: fooobar.com/questions/37810/..., но с одним небольшим улучшением из-за большого репо:
Сначала:
git config --global core.compression 0
тогда клонируйте только часть вашего репо:
git clone --depth 1 <repo_URI>
и теперь "остальное"
git fetch --unshallow
но вот трюк. Когда у вас есть большое репо, вы иногда должны выполнять этот шаг несколько раз. Итак, снова,
git fetch --unshallow
и т.д.
Попробуйте несколько раз. Вероятно, вы увидите, что каждый раз, когда вы выполняете "unshallow", вы получаете все больше объектов до ошибки.
И в конце, просто чтобы быть уверенным.
git pull --all
Ответ 5
У BitBucket должен быть способ создать архив даже для большого репо с Git 2.13.x/2.14 (Q3 2017)
См. commit 867e40f (30 апреля 2017 г.), commit ebdfa29 (27 апреля 2017 г.), commit 4cdf3f9, commit af95749, commit 3c78fd8, commit c061a14, и совершить 758c1f9, Rene Scharfe.
(объединено Junio C Hamano - gitster
- в commit f085834, 16 мая 2017 г.
archive-zip
: файлы поддержки размером более 4 ГБ
Напишите дополнительное поле дополнительной информации zip64
для больших файлов как часть их локальных заголовков и как часть их центральных заголовков каталогов. Также напишите zip64
версию дескриптора данных в этом случае.
Если мы потоковываем, мы не знаем сжатый размер на момент написания заголовка. Deflate может в конечном итоге сделать файл больше, а не меньше, если нам не повезло.
Запишите локальный заголовок zip64
уже для файлов размером 2 ГБ или более в этом случае, чтобы быть в безопасности.
Оба размера должны быть включены в локальный заголовок zip64
, но дополнительное поле для каталога должно содержать только 64-разрядные эквиваленты для 32-битных значений 0xffffffff
.