Git, fatal: The remote end hung up unexpectedly
Когда я пытался бежать
git push origin master --force
Я только что получил
Counting objects: 2649, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (1280/1280), done.
error: RPC failed; result=22, HTTP code = 413 | 116 KiB/s
fatal: The remote end hung up unexpectedly
Writing objects: 100% (2504/2504), 449.61 MiB | 4.19 MiB/s, done.
Total 2504 (delta 1309), reused 2242 (delta 1216)
fatal: The remote end hung up unexpectedly
Everything up-to-date
Is it something to do with not being secure? I tried creating a public key as in the answer for Fatal: The remote end hung up unexpectedly and running it again, but it still doesn't work. Am I not actually using the key? Если да, то как мне его использовать?
55 ответов
Это похоже на то, как я могу получить по умолчанию для github ssh, а не https для новых репозиториев. Возможно, стоит попробовать перейти с протокола http на ssh:
$ git remote add origin git@github.com:username/project.git
Проблема связана с настройками буфера git/https. Для того, чтобы решить это (взято из Git не удается при нажатии на коммит на github)
git config http.postBuffer 524288000
И снова запустите команду
Причина. Превышен размер сообщения по умолчанию для Git.
Решение:
Перейдите к репо.
Выполните следующую команду, чтобы увеличить буфер до 500 МБ после перехода к хранилищу:
git config http.postBuffer 524288000
Вы можете получить такую ошибку
ошибка: не удалось заблокировать файл конфигурации.git/config: нет такого файла или каталога
это потому, что у вас нет местного .git/config
файл Вы можете заставить его работать с помощью этой команды
git config --global http.postBuffer 524288000
Виновник (в моем случае):
сеть с высокой задержкой.
Это не ответ сам по себе, а скорее наблюдение, которое может помочь другим. Я обнаружил, что эта ошибка иногда возникает в сетях с высокой задержкой (например, мне нужно использовать спутниковую антенну для доступа в Интернет). Скорость сети нормальная, но задержка может быть высокой. Примечание: проблема существует только в определенных сценариях, но я не определил, что это за шаблон.
Временное смягчение последствий:
я переключился на сеть - я перешел на более медленную, но с меньшей задержкой сотовую сеть (мой телефон использовался в качестве точки доступа) - и проблема исчезла. Обратите внимание, что я могу делать это только периодически, потому что моя сотовая связь также является прерывистой. Плюс использование полосы пропускания увеличивает расходы. Мне также повезло, что у меня есть такая возможность. Не все.
Я уверен, что где-то есть какой-то параметр конфигурации, который делает git - или ssh, или curl, или что-то еще, что истекает первым, - более терпимым к таким сетям, но я не знаю, что это такое.
Обращение к застройщикам:
такого рода проблемы - постоянная проблема сельского населения. Пожалуйста, думайте о нас, когда вы разрабатываете свои системы, инструменты и приложения. Спасибо.
Другие решения не работали в моем случае, сбор мусора исправил это для меня:
git gc --aggressive
При использовании GitHub в каталоге репо выполните эту команду, чтобы установить http.postBuffer
до максимально допустимого значения для GitHub:
git config http.postBuffer 2147483648
Если вместо клонирования репо использовать
git clone
, его можно клонировать с той же опцией:
git clone -c http.postBuffer=2147483648 git@github.com:myuser/myrepo.git /path/to/myrepo
В обоих случаях указанное выше число эквивалентно 2 ГиБ. Однако возможно, что вам понадобится до этого количества свободной памяти, чтобы использовать это значение.
Убедитесь, что каждое нажатие на GitHub содержит коммиты, которые не добавляют больше, чем этот размер изменений. На самом деле, для безопасности я бы установил размер push-фиксации менее 1,8 ГиБ. Для этого может потребоваться разделение большого коммита на более мелкие коммиты и нажатия.
Почему это значение?
Это конкретное значение используется потому, что, по крайней мере, в 2018 году это значение было задокументировано (ссылка на архив) как ограничение размера push-уведомлений GitHub:
мы не разрешаем подталкивать более 2 ГБ
Почему бы не поставить ниже?
В некоторых предыдущих ответах говорится, что нужно установить его на 524288000 (500 МБ), но это число кажется произвольным и беспочвенным. Любое более низкое значение должно работать, пока ваш размер выталкивания не превышает установленное значение.
Почему бы не поставить выше?
Если вместо этого вы установите значение выше 2 ГиБ, и если размер вашей попытки отправки также больше, вы можете ожидать документированную ошибку с GitHub:
удаленный: фатальный: размер пакета превышает максимально допустимый
Вопреки одному из других ответов - у меня была проблема с push через ssh - я переключился на https, и это было исправлено.
git remote remove origin
git remote add origin https://github..com/user/repo
git push --set-upstream origin master
Следующие команды могут помочь вам ...
git config --global http.postBuffer 1048576000
git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999
На основе протокола, который вы используете для отправки в свое репо
HTTP
git config --global http.postBuffer 157286400
SSH
Добавьте следующее в ~/.ssh/config
файл на вашем Linux-компьютере
Host your-gitlab-server.com
ServerAliveInterval 60
ServerAliveCountMax 5
IPQoS throughput
Эта ошибка также может быть вызвана отсутствующими разрешениями на запись в хранилище.
Мой конкретный случай прошел так:
- Я создал репо с
root
пользователь моего сервера (через SSH). - Я установил git-сервис и создал
git
Пользователь Linux, который должен управлять всеми действиями, связанными с git. - К тому времени я уже забыл, что репо было создано с
root
пользователь в первую очередь, аgit
У пользователя просто не было прав доступа к файлу для записи в хранилище.
В этой статье есть очень хорошее объяснение, и она решила мою проблему.
git config --global http.postBuffer 157286400
Ни одно из вышеперечисленных решений у меня не сработало, однако коммит, который я продвигал, был очень большим.
Очень просто, я разделил его на два коммита и нажал каждый отдельно, и он прошел мгновенно.
В моем случае я получил эту ошибку при нажатии с Intellij Idea.
Вот как я отследил свою ошибку и исправил ее.
- включить ведение журнала отладки в терминале, что никогда не бывает плохой идеей:)
set GIT_CURL_VERBOSE=1 set GIT_TRACE=1
- нажмите через терминал, а не через intellij
git push
-> fatal: The current branch feature/my-new-feature has no upstream branch.
To push the current branch and set the remote as upstream
Решением было установить восходящий поток, который раньше должен был работать неправильно:
git push --set-upstream origin feature/my-new-feature
Даже после настройки постбуфера проблема не была решена.
Моя проблема была решена, когда я изменил свою сеть Wi-Fi с широкополосной на мобильную точку доступа. Возможно, это неправильный ответ, но он решил проблему.
Убедитесь, что у вас хорошая скорость интернета.
Ни один из приведенных выше ответов не помог мне, но вот что сработало.
1) удалить .git/
из вашего проекта
2) клонируйте удаленное репо в новое место, например на рабочий стол.git clone https://github.com/foo/bar.git
3) move (двигаться) .git/
из нового местоположения в старое
4) повторно зафиксируйте и отправьте свои изменения
В нашем случае проблема была в клоне, который написал .git/config
файл, который содержал запись URL, которая была доступна только для чтения. Изменение URL-адреса из ://
метод к @
Метод исправил проблему.
Бег git remote -v
осветил вопрос какой-то.
Если вы используете git для Windows (и, вероятно, если вы делаете это на компьютере с Windows), и ни одно из других исправлений здесь не сработало, попробуйте перейти на https://github.com/git-for-windows/git/releases, и получение версии или после версии 2.4.5. Исправил это прямо для меня.
Я решил эту проблему, перепаковав:
git repack --max-pack-size=100M -a -d
Перейдите в Репозиторий> Открыть в командной строке на рабочем столе GitHub Выполните следующие команды:
set GIT_TRACE=1
set GIT_CURL_VERBOSE=1
git push origin <branch>
Еще одно дополнение, так как я столкнулся с этой ошибкой по-другому, и Google взял меня сюда.
Моя проблема была несоответствием случая; один верблюжий корпус, а другой нет. Очевидно, GIT останавливает вас, не говоря вам, почему. Поэтому, если ваши филиалы отличаются от удаленных только заглавными буквами, попробуйте изменить их на идентичные.
Смотрите: Git: "Мастер не может быть преобразован в ветвь" после слияния
Недавно столкнулся с такой же проблемой. При клонировании удаленного репозитория я получил следующую ошибку:
фатальный: удаленный конец неожиданно повесил трубку MiB | 7,00 KiB / s
фатальный: ошибка раннего
пакета индекса EOF
Когда я погуглил об ошибке, меня перенаправили сюда. И я последовал большинству ответов, но не решил свою проблему.
Единственным решением было переустановить мой драйвер « Сетевой адаптер (WiFi) ». Итак, я хочу подчеркнуть, что указанная выше ошибка также может быть результатом проблем в программном обеспечении драйвера WiFi вашего ПК. Если ни один из упомянутых ответов не работает, вы можете попробовать переустановить драйвер WiFi. Это решит проблему.
Вы можете легко переустановить драйвер WiFi следующим образом:
После перезагрузки компьютера попробуйте успешно выполнить операции git (нажатие / извлечение / клонирование).
Это может произойти после обновления вашей платформы OSX.
Откройте Терминал и перейдите в свою.ssh-папку и введите ssh-add -K ~/.ssh/id_rsa
Вероятно, вы клонировали репозиторий в существующем, чтобы решить проблему, просто клонируйте репозиторий в другой каталог и скопируйте изменения в этот новый каталог, а затем запустите push.
У меня такая же проблема в моем проекте. Когда я обновил файл проекта библиотеки Cocoapods, размер файла проекта увеличился. После долгих исследований и разработок я получил решение этого вопроса, но оно не работает должным образом.
Мои решения: -
Шаг 1. Сначала увеличьте размер буфера. Размер буфера вы можете увеличить или уменьшить в соответствии с вашими требованиями.
git config http.postBuffer 2147483648
Или
git config http.postBuffer 524288000
Шаг 2. Запустите команду для отправки кода.
git push origin yourBranchName
Шаг 3. Проверьте, обновлен ли ваш репозиторий git на Github или Gitlab. Если он не обновлен, используйте эту команду, чтобы принудительно отправить в git.
git push origin yourBranchName -f
Я надеюсь, что это решит вашу проблему.
Для нас проблема заключалась в том, что у нас было множество файлов, которыми вместо этого должен был управлять git lfs.
Для решения проблемы мы сделали следующее:
# Soft reset so you can author a new commit
git reset --soft HEAD~1
# Install git lfs
git lfs install
# Track large files of a specified file type YMMV
git lfs track "*.uasset" "*.umap"
# Re-add everything
git add .
# Author a new commit
git commit -m "git lfs ftw"
# Push
git push
PLESK Nginx и GIT Я получал эту ошибку на plesk git, и при отправке большого репозитория с (кто знает, что) он дал мне эту ошибку с HTTP-кодом 413, и я посмотрел, что следующим сервером был Plesk, и на нем работали nginx и apache2. так я заглянул в логи и нашел ошибку в логах nginx
Перейдя по этой ссылке, можно разрешить plesk перестроить конфигурацию с большей загрузкой файлов.
Я пропустил часть php для git
После этого git push работал без ошибок.
Я сталкивался с подобной ошибкой при загрузке большого репозитория, "роковой: удаленный конец неожиданно завис", без каких-либо дополнительных подробностей.
После долгих исследований вот что я сделал:
- Использование SSH вместо HTTPS не решило проблему.
- Увеличивать http.postBuffer постепенно до очень большого значения, все равно не повезло.
- Я выяснил, что это может быть из-за больших файлов в репо (так как это недавно перенесенный репо из перформанса), поэтому я заново создал репо, используя LFS, установив largeFileThreshold на 40 м, что значительно уменьшило размер репо (с 3,5 ГБ до 500M). Я думал, что это решит проблему, но, к моему удивлению, я все еще столкнулся с той же ошибкой.
Наконец, мне пришло в голову, что, возможно, я использую старый git-клиент, так как не вижу дополнительных сообщений об ошибках. Я обновил git client до последней (2.20.1), и вуаля, ошибка исчезла!
У меня было такое же сообщение об ошибке сfatal: The remote end hung up unexpectedly
и ни один из ответов не решил мою проблему. Мой обычный рабочий процесс выглядит так:
- проверить базовую ветвь локально (настроен удаленный источник)
- построить дочернюю ветку из базовой ветки локально
- сделать все мое кодирование
- совершить мои вещи
- нажмите его (тогда консоль сообщит мне, что нет исходного набора)
- настройка восходящего потока
после этого мой код обычно отправляется, но в этом случае у меня была фиксация, в которой я коснулся более 110 файлов, и я получил ошибку.
Решение:
- переименование текущей локальной ветки с помощью
git branch -m <branch name temp>
- базовая ветвь проверки (как лучше всего в том же состоянии, в котором была создана локальная ветвь)
- создание новой дочерней ветки с окончательным именем с помощью
git checkout -b <branch name>
- нажатие новой дочерней ветки сейчас без какой-либо фиксации, чтобы она была создана на удаленной стороне (также снова с помощью
git push --set-upstream origin <remote branch name>
) - выбор коммитов из
<branch name temp>
ветвь - нажатие коммитов (после проверки того, что я выбрал все коммиты в правильном порядке, первый коммит должен быть первым выбранным)
и тогда это сработало.
Надеюсь, это тоже кому-то поможет! :)
Иногда, когда мы пытаемся извлечь из ветки, которой нет в удаленном репозитории, появляется эта ошибка.
если ветка существует в удаленном репозитории, попробуйте эту команду:
git config --global http.postBuffer 157286400
Надеюсь, это решит вашу проблему.