Git Gui: Постоянно получаю: «В настоящее время в этом репозитории около 320 свободных объектов».

89

Каждый раз, когда я запускаю Git Gui над конкретным проектом, я получаю следующее сообщение:

В настоящее время в этом репозитории около 320 незакрепленных объектов.

введите описание изображения здесь

Затем я нажимаю « Да» и получаю следующее диалоговое окно:

введите описание изображения здесь

Дело в том, что когда я снова открываю Git Gui, я получаю то же самое сообщение , снова о 320 незакрепленных объектах! Как будто нажатие Да вообще не повлияло.

сашоальм
источник
Можете выложить вывод git count-objects -v?
CB Bailey
5
@TheCodeArtist Спасибо, я нашел там ответ. Запуск git gcявно из командной строки работал для меня, как на этот комментарий .
sashoalm

Ответы:

81

Просто пропустите всплывающее окно, как предлагает в принятом ответе Как пропустить всплывающее окно «Свободный объект» при запуске 'git gui', упускает из виду тот факт, что Git сообщает вам о возможной проблеме производительности. Это можно исправить, запустив эту команду из командной строки:

cd path/to/your/git/repo
git gc --aggressive

Из вывода git help gc:

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

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

--агрессивный

Обычно git gc работает очень быстро, обеспечивая при этом хорошее использование дискового пространства и производительность. Эта опция заставит git gc более агрессивно оптимизировать репозиторий за счет гораздо большего количества времени. Эффект от этой оптимизации сохраняется, поэтому эту опцию нужно использовать только изредка; каждые несколько сотен изменений или около того.

Это должно предотвратить появление подсказки на некоторое время.

Грег Бургхардт
источник
19
Странно то, что простой запуск git gcиз командной строки исправил это для меня. Может быть git guiработает что-то вроде git gc --extra-unaggressive:)
sashoalm
38
git pruneкажется, исправляет, когда git gcнет.
Mahn
1
Обычно вы не хотите работать с --aggressive; это вызывает gitнеобходимость пересчета дельт, что обычно непродуктивно и требует очень много времени; см. этот пост - manстраница вводит в заблуждение. Наверное git gc, в этом случае достаточно простого .
Джефф Клайтс 09
16
Пришлось использовать, --prune=allчтобы избавиться от сообщения. Ни git gcв командной строке , ни опций --aggressiveили --pruneне сделал трюк.
галка
1
@JeffClites Статьи, на которую вы ссылаетесь, (на эту дату) 11 лет, и в ней говорится: «По этой причине --aggressive, вероятно, будет удалена с страниц руководства и на какое-то время оставлена ​​как недокументированная функция». Не копая дальше, кажется странным, что поврежденное сообщение все еще там. Есть ли вероятность, что поведение было изменено с момента написания статьи?
pipe
3

Я использую команду:

git gc --prune = сейчас

и больше никаких предупреждений о слишком большом количестве незакрепленных предметов после завершения.

источник ссылки: https://git-scm.com/docs/git-gc

AdvenC
источник
1
Должен сказать, что это было решение, которое сработало для меня. Как ни странно, git gc --aggressiveпредупреждение не было удалено (и не было нажатий на пользовательский интерфейс, который, кажется, выполняется просто git gc).
saeraphin