0Pricing
DevOps Bootcamp · Урок

Обслуживание и очистка репозитория

Изучите команды `git gc` и `git prune` для очистки и оптимизации локального репозитория Git.

«Обслуживание и очистка репозитория» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.

Добро пожаловать в обслуживание Git

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

В этом уроке вы узнаете, как очищать и оптимизировать репозитории Git с помощью таких мощных команд, как git gc и git prune. Это помогает проектам работать бесперебойно.

Как устроено хранилище объектов Git

Сначала разберёмся, как Git хранит данные. Git сохраняет историю проекта в виде набора «объектов»:

  • Блобы: содержимое файлов
  • Деревья: каталоги и их содержимое
  • Коммиты: снимки проекта на определённый момент времени
  • Теги: указатели на определённые коммиты

Эти объекты могут храниться как «отдельные объекты» или сжиматься в «файлы пакетов» для повышения эффективности.

Знакомство с `git gc` (сборка мусора)

Команда git gc расшифровывается как «сборка мусора». Это встроенный инструмент Git для очистки и оптимизации репозитория.

Она выполняет следующие основные задачи:

  • Упаковка отдельных объектов: сжатие отдельных объектов в единые файлы пакетов.
  • Удаление недостижимых объектов: удаление объектов, на которые больше не ссылается ни один коммит, ветка или тег (после достижения определённого возраста).
  • Удаление старых файлов пакетов: удаление устаревших сжатых файлов объектов.

Этот процесс делает репозиторий меньше и быстрее.

Запуск `git gc` (общее применение)

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

Обычно запуск безопасен, но перед серьёзной очисткой рекомендуется убедиться, что у вас нет незакоммиченной работы, которую может потребоваться восстановить.

Попробуйте выполнить команду в терминале:

git gc

Понимание вывода `git gc`

При выполнении git gc вы увидите вывод, похожий на этот:

Counting objects: 1234, done. Compressing objects: 100% (987/987), done. Writing objects: 100% (1234/1234), done. Total 1234 (delta 567), reused 0 (delta 0) Removing duplicate objects: 100% (256/256), done. Pruning objects: 100% (123/123), done.

Это показывает, как Git упаковывает объекты, записывает новые файлы пакетов и удаляет старые недостижимые объекты. Числа зависят от текущего состояния вашего репозитория.

В центре внимания — `git prune`

Хотя git gc выполняет множество задач по очистке, git prune специально удаляет «висячие» и «недостижимые» объекты.

  • Висячие объекты: это объекты, которые существуют в репозитории, но больше не связаны ни с одним коммитом, веткой или тегом и также не входят в пакетный файл.
  • Недостижимые объекты: более общее понятие, близкое к висячим объектам. Они могут появляться по разным причинам, например после перебазирования или сброса, изменяющих историю.

git prune удаляет эти объекты, если они старше стандартного срока хранения (обычно двух недель).

Непосредственный запуск `git prune`

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

Чтобы увидеть, что сделала бы команда git prune, не удаляя ничего на самом деле, используйте параметр --dry-run:

git prune --dry-run

Очистка с указанием срока хранения

По умолчанию git prune (а также этап очистки в git gc) удаляет только объекты, которым больше двух недель. Переопределить это поведение можно с помощью параметра --expire.

Это полезно, если вы хотите агрессивно очистить висячие объекты, созданные совсем недавно, например после экспериментального перебазирования, которое, как вы уверены, не потребуется отменять.

Например, чтобы удалить объекты старше одного дня:

git prune --expire=1.day

Отличие от `git reflog expire`

Важно не путать git prune с git reflog expire. Хотя обе команды связаны с очисткой, у них разные задачи:

  • git prune: удаляет сами объекты Git (двоичные данные, деревья и коммиты) из базы объектов.
  • git reflog expire: очищает записи в журнале ссылок (локальной истории того, где находился ваш HEAD), из-за чего некоторые коммиты становится сложнее найти, но сами объекты не удаляются.

Всегда соблюдайте осторожность при изменении истории или выполнении команд очистки!

Проверка обслуживания

Что из перечисленного лучше всего описывает основную роль git gc?

Итоги и следующие шаги

Поздравляем! Вы научились поддерживать порядок и эффективность в репозиториях Git.

  • git gc: универсальная команда для сборки мусора, упаковки объектов и очистки.
  • git prune: целенаправленно находит и удаляет недостижимые и висячие объекты, срок хранения которых истёк.

Регулярное обслуживание помогает поддерживать бесперебойную работу с Git и не допускать чрезмерного расхода дискового пространства репозиториями. Так держать!

Часто задаваемые вопросы

Урок «Обслуживание и очистка репозитория» бесплатный?

Да — полный текст урока «Обслуживание и очистка репозитория» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.

Чему я научусь в уроке «Обслуживание и очистка репозитория»?

Изучите команды `git gc` и `git prune` для очистки и оптимизации локального репозитория Git. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать DevOps Bootcamp?

Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Обслуживание и очистка репозитория»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке DevOps Bootcamp?

Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Git Reflog и восстановление истории
  2. Git Bisect для отладки
  3. Обслуживание и очистка репозитория
  4. Перезапись истории с помощью git filter-repo
← Назад к DevOps Bootcamp