3

Git, похоже, сохраняет капли, которые были добавлены, но не зафиксированы

#> mkdir foo
#> cd foo
#> echo a > data.txt
#> git add data.txt
#> find .git/objects
.git/objects/58/7be6b4c3f93f93c489c0111bba5596147a26cb

Хорошо, теперь измените содержимое.

#> echo b > data.txt
#> git add data.txt
#> find .git/objects
.git/objects/61/780798228d17af2d34fce4cfbdf35556832472
.git/objects/58/7be6b4c3f93f93c489c0111bba5596147a26cb

Нам больше не нужно 58/7be6b4c3f93f93c489c0111bba5596147a26cb , не так ли?

#> git commit -m 'first'
#> find ./git/objects
.git/objects/c0/eef182819e5c530c407ca17a24e39cb6682ed3
.git/objects/61/780798228d17af2d34fce4cfbdf35556832472
.git/objects/58/7be6b4c3f93f93c489c0111bba5596147a26cb
.git/objects/70/a6a81a455bea58166d60d21060b074d3271b6a

Сирота 58/7be6b4c3f93f93c489c0111bba5596147a26cb все еще там.

Я сделал git add на многих файлах, которые затем изменились, прежде чем они были зафиксированы. Могу ли я удалить BLOB-объекты, на которые больше нет ссылок в индексе?

1 ответ1

1

Я не вижу причин, по которым вы не могли этого сделать, и git, похоже, согласен:git fsck --unreachable показывает его как висячий узел
git prune --dry-run показывает, что он будет удален.

Я бы не стал запускать его вручную (в обычном сценарии репо / работы) - команда git gc имеет именно эту цель: (из https://git-scm.com/docs/git-gc)

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .