Как загрузить большой репозиторий 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.