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
снова реагирует.