Что такое репозиторий
Тема дорожной карты · Изучи Git
Git-репозиторий — это директория, в которой хранится вся история проекта, включая коммиты, ветки, теги, refs, конфигурацию и объекты. Репозиторий создается с помощью команды git init, а его копия делается с помощью git clone. Голый (bare) репозиторий (git init --bare) содержит только содержимое подпапки .git/ (без рабочего дерева) — это то, во что push'ат на сервере. Каждый клон репозитория является самодостаточным и позволяет работать с коммитами, ветвями и историей проекта в офлайн-режиме. Копирование репозитория через команду cp -r рабочей директории приведет к потере подпапки .git/, что может привести к утрате истории проекта.
Как это работает
Git-репозиторий представляет собой объектную модель, где каждый файл хранится как объект типа blob, директории — как объект типа tree, а снимки состояния проекта — как объекты типа commit. Каждый коммит-объект содержит ссылку на соответствующий tree (структуру дерева), родительские коммиты, данные автора и сообщение коммита. Refs (например, refs/heads/main, refs/tags/v1.0, HEAD) — это просто файлы, которые указывают на конкретные коммиты по их SHA-хешам. Важно понимать, что операции в репозитории не изменяют историю напрямую, а создают новые коммиты, что позволяет легко откатить изменения или восстановить потерянные коммиты с помощью команды git reflog.
Когда применять
Объектная модель репозитория особенно полезна, когда вы сталкиваетесь с вопросами типа "что только что произошло с моей историей?". Команда git cat-file -p <sha> позволяет просмотреть содержимое любого объекта по его SHA-хешу. Команда git reflog позволяет найти "потерянные" коммиты, которые на самом деле не исчезают за 30 дней. Понимание различий между fast-forward, merge-коммитами и rebase также важно, так как это влияет на топологию графа коммитов в репозитории.
Типичные ошибки
Одной из распространенных ошибок при работе с репозиторием является заблуждение, что коммиты представляют собой разницу между состояниями проекта (diff), тогда как на самом деле они представляют собой снимки состояния. Другая распространенная ошибка — паническое удаление директории .git при возникновении проблем, что приводит к утрате локальных коммитов, которые можно было бы восстановить. Наконец, считается, что коллизии SHA-хешей вероятны, хотя на практике это крайне маловероятно благодаря теории дня рождения для SHA-1.
Связанные понятия
Полезные ресурсы
Проверить знания (1)
Загрузка вопросов…