Репозиторий в Git: что это простыми словами
Репозиторий — одно из центральных понятий в Git, но для новичков оно может звучать пугающе. На деле всё проще: репозиторий — это папка твоего проекта, которая содержит историю всех изменений. Если обычная папка хранит только текущее состояние файлов, то Git-репозиторий хранит ещё и всё, что с ними происходило. Эта статья объяснит как устроен репозиторий, что в нём находится и как с ним работать.
Репозиторий — это папка с историей #
Самое простое объяснение: репозиторий (от английского repository — «хранилище») — это папка твоего проекта, в которой Git отслеживает все изменения.
Аналогия: представь, что ты пишешь книгу. Обычная папка — это только последняя версия главы. Git-репозиторий — это последняя версия плюс все черновики, плюс пометки о том, кто что изменил и когда. Причём эта история занимает минимум места, потому что Git хранит её умно.
Вся магия Git скрыта в папке .git, которая создаётся при инициализации репозитория. Эта папка — и есть сам репозиторий. Все остальные файлы проекта — это «рабочая директория», с которой ты работаешь напрямую.
# Инициализировать репозиторий в текущей папке
git init
# Git создаст папку .git — это и есть репозиторий
ls -la
# drwxr-xr-x .git/ ← вся история здесь
# -rw-r--r-- README.md
# -rw-r--r-- main.py
Два типа репозиториев #
Когда говорят о Git-репозиториях, различают два типа.
Локальный репозиторий — это папка на твоём компьютере. Ты создаёшь его через git init или клонируешь с сервера через git clone. Здесь ты делаешь коммиты, создаёшь ветки, просматриваешь историю — и всё это работает без интернета.
Удалённый репозиторий — это копия проекта на сервере. Обычно это GitHub, GitLab или Bitbucket. Удалённый репозиторий нужен для двух вещей: синхронизации с другими разработчиками и резервного копирования.
Твой компьютер Сервер
┌─────────────────┐ ┌─────────────────┐
│ Локальный репо │◄── pull ─────│ Удалённый репо │
│ │──── push ───►│ (GitHub и др.) │
└─────────────────┘ └─────────────────┘
Ты работаешь в локальном репозитории, а когда готов поделиться — отправляешь изменения на удалённый сервер (git push). Коллеги забирают твои изменения (git pull).
Структура папки .git #
После git init папка .git выглядит так:
.git/
├── objects/ # Хранилище всех версий файлов (блобы, деревья, коммиты)
├── refs/ # Указатели на коммиты (ветки и теги)
│ ├── heads/ # Локальные ветки
│ └── remotes/ # Удалённые ветки
├── HEAD # Указатель на текущую ветку
├── config # Конфигурация репозитория
├── index # Индекс (staging area)
├── hooks/ # Скрипты для автоматизации
└── logs/ # История перемещений HEAD
Самое важное: .git/objects — это база данных всех версий всех файлов. Git хранит их в виде объектов с SHA-1 хешем в качестве ключа. Именно поэтому история Git нетленна — изменить прошлое незаметно невозможно.
⚠️ Осторожно: никогда не редактируй файлы внутри
.gitвручную. Это может необратимо повредить репозиторий.
Как создать репозиторий #
Есть два сценария.
Сценарий 1 — новый проект. Ты создаёшь новую папку и инициализируешь в ней репозиторий:
# Создать папку и войти в неё
mkdir my-project
cd my-project
# Инициализировать репозиторий
git init
# Git выведет:
# Initialized empty Git repository in /Users/you/my-project/.git/
Сценарий 2 — существующий проект. Ты клонируешь уже имеющийся репозиторий с сервера:
# Клонировать репозиторий (скачает проект + всю историю)
git clone https://github.com/user/project.git
# Войти в склонированную папку
cd project
После git clone у тебя сразу настроена связь с удалённым репозиторием: Git запомнил откуда ты клонировал под именем origin.
Что хранится в репозитории #
Репозиторий — это не просто набор файлов. В нём хранятся:
Исходный код — все файлы проекта в их текущем состоянии.
История коммитов — последовательность снимков состояния проекта с авторами, датами и описаниями изменений.
Ветки — параллельные линии разработки. Главная ветка обычно называется main или master.
Теги — пометки важных точек в истории (например, версии v1.0, v2.0).
Конфигурация — настройки репозитория: имя, email, настройки удалённых серверов.
Публичные и приватные репозитории #
Если ты хранишь репозиторий на GitHub или GitLab, можно выбрать видимость:
Публичный репозиторий — код доступен всем. Используется для open source проектов. Любой может посмотреть код, но вносить изменения могут только те, кому ты дал разрешение.
Приватный репозиторий — код видят только приглашённые участники. Используется для коммерческих проектов и личной разработки.
Видимость репозитория не влияет на то, как с ним работает Git — все команды одинаковы.
Практические команды для работы с репозиторием #
# Инициализировать новый репозиторий
git init
# Клонировать существующий
git clone https://github.com/user/project.git
# Проверить статус репозитория
git status
# Посмотреть историю коммитов
git log --oneline
# Проверить связанные удалённые репозитории
git remote -v
# Добавить удалённый репозиторий
git remote add origin https://github.com/user/project.git
# Отправить изменения в удалённый репозиторий
git push origin main
# Получить изменения из удалённого репозитория
git pull origin main
# Посмотреть конфигурацию репозитория
git config --list
Частые ошибки #
«Я случайно удалил папку .git» — к сожалению, если удалил .git, история потеряна. Рабочие файлы останутся, но Git больше не знает об этом проекте. Вывод: делай регулярные пуши на удалённый сервер — это и есть резервная копия.
«git status говорит ’not a git repository’» — ты находишься в папке, которая не является Git-репозиторием. Либо перейди в правильную папку, либо выполни git init чтобы инициализировать репозиторий здесь.
«Я клонировал репозиторий, но он пустой» — возможно, удалённый репозиторий действительно пустой (только что создан). Или ты смотришь не в ту папку. Проверь git log — если история есть, всё нормально.
Часто задаваемые вопросы #
Репозиторий и проект — это одно и то же? #
Не совсем. Проект — это просто набор файлов. Репозиторий — это проект плюс история всех его изменений в Git. Проект может существовать без Git, репозиторий — нет.
Где хранится история в репозитории? #
В скрытой папке .git внутри директории проекта. Git хранит там всё: объекты, ссылки, конфигурацию. Посмотреть содержимое можно командой ls -la .git.
Может ли быть несколько локальных репозиториев одного проекта? #
Да. Ты можешь клонировать один и тот же удалённый репозиторий на несколько компьютеров или в несколько папок на одном компьютере. Каждая копия — отдельный локальный репозиторий.
Если я удалю папку .git, что случится? #
Потеряешь всю историю Git, но сами файлы проекта останутся нетронутыми. Папка станет обычной директорией без контроля версий.
Какого размера может быть репозиторий? #
Размер не ограничен технически, но на практике репозитории от нескольких мегабайт до гигабайт. Очень большие проекты (ядро Linux, Windows) используют специальные техники: Git LFS для больших файлов, sparse checkout для работы с частью репозитория.