Git fetch зависает на git-upload-pack

По-видимому, случайно наши локальные репозитории больше не могут получать данные с нашего сервера Bonobo. Это происходит с нашим самым большим удаленным репозиторием (около 4 ГБ) для разных людей и в разное время, когда мы пытаемся получить локально. Сначала это было всего раз в несколько месяцев, но теперь это происходит все чаще и происходит сегодня со многими локальными репозиториями одновременно. На данный момент мы решаем это, перемещая рабочую папку .git.

Быстро печатает POST git-upload-pack (gzip X to Y bytes), потом висит от получаса до часа.

Если я удаляю пакетный файл из каталога объектов, он жалуется на отсутствующие вещи, а затем начинает правильно извлекать, но только для этого git-upload-pack.

Я пробовал repack и gc по-разному, но безрезультатно. Я попытался обновить git как на сервере, так и на клиенте с 1.8.4 до 1.9.

У cloneing была та же проблема, но обновление Bonobo решило ее, хотя это была та же версия git. Недавно клонированное репо вчера работало, но сегодня у него та же проблема.

Интересным может быть то, что у нас есть много dll и pdb в нем. Он используется уже год и был импортирован из репозитория SVN с помощью git-svn.

это след

$ GIT_TRACE=1 git fetch -v
trace: built-in: git 'fetch' '-v'
trace: run_command: 'git-remote-https' 'origin' 'https://xxx
/yyy.git'
trace: run_command: '"C:/Program Files (x86)/GitExtensions/GitCredentialWinStore
/git-credential-winstore.exe" get'
trace: run_command: '"C:/Program Files (x86)/GitExtensions/GitCredentialWinStore
/git-credential-winstore.exe" store'
trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet'
trace: run_command: 'fetch-pack' '--stateless-rpc' '--stdin' '--lock-pack' '--in
clude-tag' '--thin' 'https://xxx/yyy.git/'
trace: built-in: git 'fetch-pack' '--stateless-rpc' '--stdin' '--lock-pack' '--i
nclude-tag' '--thin' 'https://xxx/yyy.git/'
POST git-upload-pack (gzip 2057 to 1096 bytes)
POST git-upload-pack (gzip 2307 to 1222 bytes)
POST git-upload-pack (gzip 3657 to 1914 bytes)
POST git-upload-pack (gzip 6207 to 3192 bytes)
POST git-upload-pack (gzip 12607 to 6374 bytes)

Поиск в Google показывает, что у некоторых людей была эта проблема, но ничего из упомянутого (обновление bonobo и т. д.) не помогло.


person Stefano    schedule 12.12.2014    source источник
comment
Возможный дубликат Почему git-upload-pack (во время git clone ) зависнуть?   -  person Paul Sweatte    schedule 25.07.2017


Ответы (3)


git использует curl внутри, поэтому используйте следующие параметры конфигурации для отладки:

Конфигурация клиента:

git config --global http.postBuffer 524288000

Переменные клиентской среды:

  • GIT_CURL_VERBOSE=1
  • GIT_HTTP_MAX_REQUESTS=16

Конфигурация сервера:

  • увеличить <requestLimits maxAllowedContentLength=[желаемый размер]> на web.config; размер может быть 1073741824
  • увеличить <httpRuntime maxRequestLength=[желаемый размер]> на web.config; попробуйте значение 1024000

Кроме того, следующие настройки могут автоматически прерывать медленную передачу:

  • GIT_HTTP_LOW_SPEED_TIME
  • GIT_HTTP_LOW_SPEED_LIMIT

Если скорость передачи HTTP меньше GIT_HTTP_LOW_SPEED_LIMIT дольше, чем GIT_HTTP_LOW_SPEED_TIME, передача прерывается.

Ссылки

person Paul Sweatte    schedule 28.07.2017
comment
Спасибо, однако в настоящее время у нас нет такой же настройки, и я не могу это проверить. Надеюсь, это будет полезно для кого-то еще! - person Stefano; 28.07.2017

Я знаю, что это старый, но у меня была похожая проблема, и я хотел поделиться своим опытом. Я так и не разобрался в причине, но после обновления до последней версии Git (на сервере — хотя bonobo поставляется с собственной версией), проверки разрешений, команд вроде git fsck обновления Bonobo и даже добавления тонны дополнительных журналов в код, это то, что сделало это для меня.

Bonobo создает голый репозиторий на сервере, и я мог успешно клонировать его непосредственно на сервер, а также мог получать/извлекать и т. д. Это побудило меня попытаться реплицировать репо и заменить его копией. Итак, во временной папке:

git clone [path_to_Bonobo repo] temp_repo

Затем переместил репозиторий Bonobo git из корневой папки репозитория, вошел в корневую папку Bonobo и:

git clone --mirror [path_to_temp_repo] [original_repo_name]

Я также сделал:

git fetch --prune

git push --prune [path_to_temp_repo] +refs/remotes/origin/*:refs/heads/* +refs/tags/*:refs/tags/*

После этого Бонобо радостно начал снова тянуть и толкать.

person James Lock    schedule 04.07.2019

В моем случае я получил это зависание в git-upload-pack на сервере битбакета. Выяснилось, что проблема заключалась в следующем: на моем ключе ssh была кодовая фраза, и по какой-то неизвестной причине не появилось приглашение ее запросить.

Удаление парольной фразы решило проблему.

Я просто публикую это на случай, если это поможет другой душе.

person Jeffrey    schedule 07.04.2020