Unswpive git статус, разность, добавление (зависание)

Следующие команды git зависают (не отвечают) в одном из моих репозиториев:

git status
git diff
git stash
git add

Тот факт, что я не могу git add, заставляет меня поверить, что невосприимчивость связана не только с очень большими файлами. Поскольку git stash также зависает, я не думаю, что это просто проблема с общением с источником.

git remote show origin показывает ожидаемый удаленный URL. Я работаю над веткой и проверил, что она не была переименована. (FWIW, источник размещен на битбакете.)

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

Другие советы по устранению неполадок?

Ответ 1

Что бы это ни стоило, попробуйте git fsck (согласно одному из комментариев), затем git gc. Когда запускаются git status и git commit, они зависают для меня после обработки ряда файлов; и запуск этих команд устранил проблему. Я не знаю, какая команда на самом деле исправила проблему.

Ответ 2

  Он ответил через 15 минут или около того, и теперь отвечает немедленно, без задержки.

С Git 2.20 (Q4 2018) вы, по крайней мере, сможете проверить, что git status что-то делает (вместо того, чтобы просто висеть там): он учится отображать индикатор выполнения при обновлении индекса долгое время.

См. коммит ae9af12 (15 сентября 2018 г.) Нгуен Тай Нгук Дуй (pclouds).
(Merged by Junio C Hamano -- [TG42] -- in commit 4d87b38, 19 Oct 2018)

status: показывать индикатор выполнения, если обновление индекса занимает слишком много времени

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

Хорошо показать что-то, чтобы пользователь знал, что "git status" не висит, он просто занят чем-то.

(*) В этом случае вся статистическая информация в индексе становится недействительной и     возвращается к перефразировке всего содержимого файла, чтобы увидеть, есть ли     Разница между обновлением статистики в индексе. Это довольно     дорого. Даже с таким маленьким репо, как git.git, требуется 3     секунд.

Ответ 3

Git может создавать индекс неотслеживаемых файлов. После добавления нескольких тысяч новых файлов в только что клонированный репозиторий git status зависает более 2 минут, а затем отвечает:

It took 139.67 seconds to enumerate untracked files. 'status -uno'
may speed it up, but you have to be careful not to forget to add
new files yourself (see 'git help status').

Если у вас похожая ситуация, рассмотрите возможность перемещения неотслеживаемых файлов из хранилища и подтвердите, что git status снова реагирует.