-
Notifications
You must be signed in to change notification settings - Fork 66.3k
Description
Code of Conduct
- I have read and agree to the GitHub Docs project's Code of Conduct
What article on docs.github.com is affected?
https://docs.github.com/ru/get-started/using-git/troubleshooting-the-2-gb-push-limit
What part(s) of the article would you like to see updated?
Устранение неполадок с ограничением push в 2 ГиБ
Узнайте, как обойти ограничение в 2 ГиБ.
О пределе push
GitHub имеет максимальный предел в 2 ГиБ для одного пуша. Это ограничение может быть достигнуто при попытке отправить очень крупные репозитории в первый раз, импортируя большие репозитории с других платформ или при попытке переписать историю больших существующих репозиториев.
При превышении лимита могут появиться следующие ошибки:
fatal: the remote end hung up unexpectedlyremote: fatal: pack exceeds maximum allowed size
Вы можете разделить отправку на небольшие части или удалить журнал Git и начать с нуля. Если вы сделали один коммит размером более 2 ГиБ и не можете удалить историю Git и начать с нуля, то вам потребуется разбить большой коммит на несколько меньших с помощью интерактивного rebase.
Разделение большого push
Вы можете избежать превышения лимита, разбив пуш на более мелкие части, каждая из которых должна быть размером менее 2 ГиБ. Если ветвь находится в пределах этого размера, ее можно отправить одновременно. Однако, если размер ветки превышает 2 ГиБ, вам нужно будет разделить отправку на еще более мелкие части и отправлять только несколько коммитов за раз.
-
Если вы еще не настроили удаленный, добавьте репозиторий в качестве нового удаленного. Дополнительные сведения см. в разделе Управление удаленными репозиториями.
-
Чтобы найти подходящие коммиты, распределенные по журналу основной ветви в локальном репозитории, выполните следующую команду:
git log --oneline --reverse refs/heads/BRANCH-NAME | awk 'NR % 1000 == 0'
Эта команда показывает каждую 1000-ю фиксацию. Можно увеличить или уменьшить число, чтобы изменить размер шага.
-
Отправьте каждую из этих фиксаций в один раз в размещенный репозиторий GitHub.
git push REMOTE-NAME +<YOUR_COMMIT_SHA_NUMBER>:refs/heads/BRANCH-NAME
Если появится сообщение
remote: fatal: pack exceeds maximum allowed size, уменьшите размер шага на шаге 2 и повторите попытку. -
Выполните один и тот же процесс для каждой фиксации, определенной в журнале с шага 2.
-
Если это первый раз, когда этот репозиторий отправляется в GitHub, выполните окончательную отправку зеркального отображения, чтобы убедиться, что все оставшиеся ссылки отправляются вверх.
git push REMOTE-NAME --mirror
Если это все еще слишком велико, вам потребуется подтолкнуть другие ветви на этапах, используя те же шаги.
После ознакомления с процедурой можно автоматизировать шаги 2–4, чтобы упростить процесс. Например:
step_commits=$(git log --oneline --reverse refs/heads/BRANCH-NAME | awk 'NR % 1000 == 0')
echo "$step_commits" | while read commit message; do git push REMOTE-NAME +$commit:refs/heads/BRANCH-NAME; doneНачиная с нуля
Если репозиторий пуст или первый коммит превышает 2 ГиБ, и вы готовы сбросить историю, можно начать с нуля.
-
В локальной копии удалите скрытую
.gitпапку, чтобы удалить всю предыдущую историю Git и преобразовать ее обратно в обычную папку, полную файлов. -
Создайте пустую папку;
-
Запустите
git initиgit lfs installв новой папке и добавьте новый пустой репозиторий GitHub в качестве удаленного. -
Если вы уже используете Хранилище больших файлов Git и имеете все правила отслеживания Git LFS , которые вы планируете использовать уже перечисленные в
.gitattributesфайле в старой папке, то это должен быть первый файл, который копируется в новую папку. Перед добавлением других файлов необходимо убедиться, что правила отслеживания будут установлены, чтобы не было никаких шансов на Git LFS будет зафиксировано в обычном хранилище Git.Если вы еще не используете Git LFS, можно пропустить этот шаг или настроить правила отслеживания, которые вы планируете использовать в
.gitattributesфайле в новой папке, прежде чем копировать все другие файлы. Дополнительные сведения см. в разделе Настройка Git Large File Storage. -
Перемещайте пакеты файлов размером менее 2 ГиБ из старой папки в новую. После перемещения каждого пакета создайте фиксацию и отправьте ее перед перемещением следующего пакета. Рекомендуется ограничивать размер пакета примерно 2 ГиБ. В качестве альтернативы, если у вас есть папка с файлами, предназначенными для Git LFS, вы можете игнорировать эти файлы при рассмотрении лимита в 2 ГиБ на пуш.
После того как старая папка пуста, репозиторий GitHub должен содержать все. Если вы используете Git LFS, все файлы, предназначенные для Git LFS должны быть отправлены в хранилище Git LFS .
Additional information
The Russian version of the article "Troubleshooting the 2 GB push limit" contains numerous inaccuracies and literal translations that make it difficult to understand.
Some terms are translated incorrectly, sentences are overly long, and in some places the meaning is lost.
I suggest reviewing the translation and improving the readability of the text.