Git зависает при записи объектов

105

Я пытаюсь, git push -u origin masterи он просто зависает

Writing objects:  99% (219/220), 12.65 MiB | 97 KiB/s

12.65Часть смещается вокруг. Когда я выхожу из процесса и запускаю его снова, он возобновляется на 99%, но никогда не завершается, как и раньше.

Это никогда не продвигается успешно. Это начальная фиксация.

mattalxndr
источник
Куда вы хотите подтолкнуть? Вы используете SSH или какой-то другой протокол?
Palo Ebermann
27
Была бы установка http.postbufferпомощи? stackoverflow.com/questions/6842687/…
VonC
3
Комментарий VonC слишком легко не заметить. Меня устраивает.
Thuan
1
Невероятно. Это тоже помогло мне. А сейчас 2018 год. И это SSH, а не HTTP. И все репо как 15 МБ. А «удаленный» сервер - это localhost. Перестаньте романтизировать Git, ребята, пожалуйста! ;)
Sz.

Ответы:

225

Я последовал совету VonC:

git config --global http.postBuffer 524288000

Для будущих ссылок, на основе комментариев:

500 MB: 524288000 (as posted in the original answer)
1 GB: 1048576000
2 GB: 2097152000 (anything higher is rejected as 'out of range')
Хьюго Форте
источник
4
омг, спасибо тебе за это! выдергивал мои волосы, и это решило мои проблемы!
Бретт Томас
3
@HugoForte Увеличение буфера, похоже, разрешило мою зависшую запись файлов, но мой git push никогда не завершался (зависал после Writing objects: 100%) - раньше он зависал на 25%, так что это явно помогло. Однако у меня все еще было "странное" поведение. Я перезапустил свою систему, и это, похоже, решило проблемы ... К вашему сведению ... если кто-то все еще сталкивается с проблемами после увеличения своего буфера, перезапуск моей системы помог в моей ситуации (старое школьное решение, тем не менее, но новый перезапуск действительно помог).
twknab
4
Кто-нибудь может объяснить, откуда это число 524288000?
Райр
7
@Ryre, это 500 МБ
Хьюго Форте
1
Дай бог здоровья вам и Stackoverflow, без меня я был бы полным неудачником,
decoder7283
37

Это происходило из-за огромного, не проигнорированного файла в каталоге репо. Упс.

РЕДАКТИРОВАТЬ

Зависание произошло из-за того, что файл долго загружался. Файл не должен был быть включен в push.

РЕДАКТИРОВАТЬ

Хотя это правда , что огромный файл может быть причиной этой проблемы, если вы не можете игнорировать этот сомнительный файл или просто иметь , чтобы подтолкнуть его затем следовать этому ответу.

mattalxndr
источник
@TimoSolo Зачем мне это делать? Проблема возникла у меня, и я задокументировал точное решение. Довольно просто.
mattalxndr
4
Да, ваше решение заключалось в устранении проблемы. Для других людей, которым действительно нужно отправить большой файл, ответ @ hugo-forte решает проблему. Вы не обязаны , я просто подумал, что это поможет большему количеству людей - в духе SO.
TimoSolo 08
2
Вопрос не в том, «Как я могу зафиксировать, а затем отправить огромный файл?». Это «Мой git push бесконечен. Почему?» Если вы не ожидаете, что толчок будет длиться вечно, то, вероятно, вы (как и я) не собирались фиксировать этот огромный файл.
mattalxndr 08
3
@mattalxndr Если принятый ответ набирает 1/8 голосов, вам, вероятно, следует его изменить.
NorCalKnockOut
1
@mattalxndr Ни один из ответов не идеален. Один определяет причину, а другой предлагает решение. Идеальный ответ - выявить причину, объяснить, почему у нее есть данный результат, и предложить два альтернативных решения. ИМО, из текущих вариантов ответ Хьюго Форте лучше, потому что он решит проблему независимо от того, собирались ли вы подтолкнуть файл или нет. Это не игнорирование людей, совершивших ту же ошибку, что и вы; он решает проблему для них так же, как и для всех остальных, но оставляет на их усмотрение удалить файл, если они не собирались его отправлять.
BZ1
7

У меня была такая же проблема с (запись объектов% 16), которая зависла, а затем была фатальной. Я решил это, сохранив текущие изменения и клонировав новый репозиторий, а затем скопировав в него измененные файлы.

Например. Предположим, что текущий репозиторий - A, тогда все, что вам нужно сделать, это:

  1. mv A B
  2. git clone A
  3. mv B/* A/
  4. rm -rf B

Затем зафиксируйте и нажмите, и все сработало нормально. Он распознал перемещенные файлы как измененные :)

Маха
источник
Вы испытали другой симптом. У меня не было фатальных ошибок.
mattalxndr
5

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

Затем проверьте, есть ли у вас правильные права на запись в удаленное репо.

Пример:

Запустить локальное и удаленное репо

git init /tmp/src
git init --bare /tmp/dst
cd /tmp/src

Добавление удаленного репо в источник

src > git remote add dest /tmp/dst

Моделирование проблемы

src > chmod -R 555 /tmp/dst

Добавление поддельного файла и его продвижение

src > touch a && git add a && git commit -m 'demo'
src > git push --set-upstream dest master
src > git push
Counting objects: 3, done.
Writing objects: 99% (2/3), 202 bytes | 0 bytes/s.

Git зависает

Решение

src > chmod -R 775 /tmp/dst
Naewis
источник
2
Пожалуйста, подумайте о том, чтобы добавить к своему ответу еще несколько примеров, спасибо.
Мирза Сисич
1
Сожалею. Это лучше ?
Naewis 09
3

В моей ситуации это был размер файла. Добавив файл .gitignore с необходимыми расширениями, я смог игнорировать большинство нежелательных файлов, которые нужно отправить.

Skitty
источник
2

В моем случае у меня была низкая скорость загрузки в Интернет, и файл, который я хотел отправить, был большим, трюк в том, чтобы использовать git LFS (хранилище больших файлов), которое гораздо более терпеливо для загрузки больших файлов, вы можете найти руководство по git LFS здесь

user3160702
источник
1

git clean -f -nрешает мою проблему. Многие неотслеживаемые файлы не обнаружены. Но будьте осторожны, потому что это приведет к удалению файлов в вашем каталоге.

Шерлок
источник
3
Конкретно какие файлы он удалит?
Jazimov
1

В моем случае я пытался продвигаться, не соблюдая правила моей компании. Позже я узнал, что мы должны начинать наши сообщения о фиксации с «MOBIL-XXXX», где XXXX - это номер, который разработчики назначают в Jira (еще один инструмент, который мы используем для отслеживания процесса разработки) аналитиками.

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

Онат Коруджу
источник
0

У меня была такая же проблема на машине с Windows 10, writing objectsзависала, но в немного другой ситуации.

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

Я пробовал все другие решения, найденные в Интернете, но в моем случае ничего не работало, и последнее, что я пробовал, действительно сработало. Похоже, это было из-за некоторых разрешений Windows для определенного диска и папки, которые не позволяют приложению записывать в эти конкретные папки или обновлять файлы, даже когда я вошел в систему с учетной записью администратора и запустил приложение как администратор. Итак, эта команда:

attrib -r +s D:\foldername 

исправил проблему для меня.

Просто разместите это здесь, возможно, у кого-то такая же проблема, как у меня.

h4rd4r7c0r3
источник