git push не работает: сбой RPC; результат = 22, код HTTP = 411

127

У меня только одна ветка. Несколько месяцев я использую

git push origin master

передать в мой локальный репозиторий. Вчера вечером, после того как я внес небольшие изменения в свой локальный репозиторий и попытался нажать ту же команду, я получил следующую ошибку:

error: RPC failed; result=22, HTTP code = 411
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Everything up-to-date

Я погуглил и нашел такие вопросы, как этот и этот , но ни один из ответов на эти вопросы не решает мою проблему.

Большинство ответов предполагают проблему оторванной головы . Но я не думаю, что моя голова оторвана. Я также не думаю, что нахожусь не в той ветке (у меня только одна ветка ...)

Я провел несколько экспериментов, чтобы выяснить, что не так, и вот результаты, которые я получил:

(1) Сначала мой git statusрезультат

# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
# egal.aux
# egal.blg
# egal.out
# egal.pdf
# egalcar.aux
# egalcar.blg
# egalcar.pdf
nothing added to commit but untracked files present (use "git add" to track)

(2) Когда я печатаю git reflog, я вижу все свои локальные коммиты, но удаленный репозиторий просто не обновляется.

(3) Когда я печатаю git branch -a, я получаю

* master
  remotes/origin/master

(4) Когда я печатаю git remote show origin, я получаю

* remote origin
  Fetch URL: http://github.com/CherryQu921/egaldoc_en
  Push  URL: http://github.com/CherryQu921/egaldoc_en
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

Я думаю, что последняя строка вывода ("перемотка вперед") странная, но я не уверен, что не так ...

Дзенинг Ку
источник
fast-forwardableозначает, что вы можете перенести локальные изменения в удаленную ветку, ничего криминального :-)
Максим Польща

Ответы:

292

При попытке нажать большой набор изменений в хранилище Git с HTTP или HTTPS, вы можете получить сообщение об ошибке , например , как ошибка: RPC failed; result=22, HTTP code = 411. Это вызвано настройкой Git по умолчанию, которая ограничивает некоторые операции HTTP до 1 мегабайта.

Чтобы изменить это ограничение, запустите в вашем локальном репозитории

git config http.postBuffer *bytes*

где байты - это максимальное разрешенное количество байтов. Например:

git config http.postBuffer 524288000

За 500 МБ (спасибо @Hengjie)

Максим Польща
источник
52
Пример git config http.postBuffer 524288000для 500 МБ.
Hengjie
9
Если вы используете gitlab, вам может потребоваться также изменить конфигурацию nginx ( /etc/nginx/sites-available/gitlab). Дополнительная информация: github.com/gitlabhq/gitlabhq/issues/3099
DanielB
что, если это покажет RPC failed; result=22, HTTP code = 502?
Дипеш Райчана
2
Я все еще получаю следующую ошибку git: RPC failed; результат = 22, HTTP-код = 504 в битбакете в студии Android
DJtiwari
23

Вы также можете сделать это глобально -

git config --global http.postBuffer 524288000

Это позволит всем локальным репозиториям загружать до 500 МБ данных.

jdr0dn3y
источник
3

Ни одно из предложенных решений не помогло нам. Нам пришлось переключиться на, sshчтобы заставить эту работу работать вместо HTTPSрешения.

javaauthority
источник
2

Если вы используете TortoiseGit для Windows, самый простой способ - использовать интегрированную конфигурацию.

В проводнике файлов нажмите левую кнопку мыши, выберите TortoiseGit -> Настройки . Примите информационное сообщение. Теперь вы можете выбрать, хотите ли вы настроить свойство только для текущего проекта или системы. Для общесистемной конфигурации нажмите «отредактировать общесистемный gitconfig» и добавьте следующую строку в раздел [http]:

postBuffer = 524288000

(если раздел [http]не существует, создайте его)

Errepunto
источник
1

Я решил ошибку 22 следующим образом: В команде "git clone" я НЕ ввел пароль пользователя. Клон сработал, но не толчок. Решение для ошибки 22: измените .git / config URL-адрес следующим образом: url = http: // user: pwd @ host / ... Затем push сработал.

Роб Ласше
источник