Тестирование истекших записей в журнале ссылок (reflog)
На этом этапе мы узнаем, как Git управляет журналом ссылок и как записи в нем могут в конечном итоге истечь. По умолчанию Git хранит записи в журнале ссылок в течение определенного периода. Доступные записи (те, на которые указывает ветка или тег) хранятся в течение 90 дней, в то время как недоступные записи (те, на которые ничто не указывает) хранятся в течение 30 дней. После этих периодов процесс сборки мусора в Git может удалить их.
Поскольку в этом практическом занятии мы не можем симулировать прохождение времени, чтобы увидеть, как записи естественным образом истекают, мы можем вручную запустить процесс сборки мусора в Git с определенной опцией для удаления старых записей в журнале ссылок.
Важно: Запуск этой команды приведет к удалению более старых записей в журнале ссылок в соответствии с настроенными сроками истечения. В реальной жизни обычно не нужно запускать это вручную, если у вас нет особой причины очистить старые записи в журнале ссылок.
Сначала убедитесь, что вы находитесь в директории my-time-machine
:
cd ~/project/my-time-machine
Теперь давайте запустим команду сборки мусора с опцией удаления записей в журнале ссылок. Мы установим очень короткий срок истечения для недоступных записей, чтобы продемонстрировать эффект.
git gc --prune=now --aggressive
Эта команда сообщает Git немедленно запустить сборку мусора (--prune=now
) и агрессивно (--aggressive
) очистить несвязанные объекты и удалить недоступные записи в журнале ссылок.
После выполнения команды давайте проверим журнал ссылок еще раз:
git reflog
Вы, возможно, заметите, что некоторые более старые записи, особенно если вы выполнили больше операций до этого практического занятия, могут отсутствовать. В нашем простом репозитории с только двумя записями в журнале ссылок возможно обе записи по-прежнему присутствуют, потому что они относительно новые и одна из них все еще доступна через HEAD
и master
. Однако, если у вас была более сложная история с недоступными коммитами, эта команда удалит их в соответствии с настройками срока истечения.
Основная мысль здесь в том, что записи в журнале ссылок не хранятся вечно. Git очищает старые записи, чтобы сэкономить место. Однако для типичных рабочих процессов разработки по умолчанию установленные сроки истечения обычно достаточны для восстановления после большинства ошибок.
Понимание того, что записи в журнале ссылок имеют срок истечения, помогает вам оценить важность создания осмысленных коммитов и веток для сохранения важных точек в истории вашего проекта.