Почему git все время говорит мне, что это «Автоматическая упаковка репозитория в фоновом режиме для оптимальной производительности»?

104

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


В одном из моих репозиториев git каждый раз, когда я вызываю (например) git fetch, git печатает:

Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.

Кажется, что это печатается каждый раз, если я делаю это git fetchнесколько раз, даже если нет никаких изменений и нечего git fetchделать. Для меня это не имеет большого смысла. Также похоже, что это происходит с другими сетевыми операциями, такими как git pushи git pull.

Команда немедленно возвращается в командную строку без дальнейшего вывода, и я не могу найти ни одного процесса git, запущенного на моем компьютере. Кажется, это происходит только с этим репозиторием и только на этой машине. git config -l | grep gcничего не возвращает.

Что я могу сделать, чтобы диагностировать или исправить эту проблему?

$ git --version 
git version 2.0.1

Я использую OS X 10.9.

Эндрю Феррье
источник
Похоже на ту же проблему, что и вопрос, который вы связали, но просто происходит достаточно быстро, чтобы не зависать.
Холлоуэй,
Также, возможно, связаны
Холлоуэй
Trengot, я так не думаю. Сообщение об ошибке немного другое - в нем упоминается «фон».
Эндрю Ферриер,
Trengot, извините, вы были правы, это было связано (вторая ссылка). Спасибо за указатель, подробности см. В моем ответе ниже.
Эндрю Ферриер,

Ответы:

170

Я нашел решение из второго предоставленного вами комментария, Trengot, спасибо. Оказалось, что у меня были болтающиеся капли, которые были внутри .git/objects/17и, следовательно, запускали упаковку:

$ git fsck
dangling blob d9ff0aeac4aa8b4e0907daed675ebf60278bc977
dangling blob dbff2d073741f9775c815d4a3c623736af224dad
dangling blob e1ffbab1c5b985cd1cd3bc0281075ea2ed80744a
dangling blob fdff59878ccb3a75689f4acca615cfb635288774

Это очистило их:

$ git gc --prune=now

Имейте в виду, согласно приведенному ниже комментарию Хенрика, это может быть немного опасно. Береги себя!

Эндрю Феррье
источник
23
Спасибо! Похоже, это сработало для меня. Имейте в виду, что --prune=nowэто немного опасно. По умолчанию --pruneвисячие капли будут храниться в течение 2 недель. Это означает, что если вы случайно выполнили неправильную перебазировку 5 минут назад или удалили ветку вчера, вы можете восстановить. Запустив эту команду, вы потеряете все зависшие блоги прямо сейчас, а не две недели назад. Кроме того, похоже, что вы никогда не должны запускать его при выполнении других команд Git в другом терминале, иначе ваше репо может стать поврежденным.
Henrik N
3
Ты спас мне день
Оуэн Чен