↓Перейти к содержанию
  1. Git: руководства и команды/

Репозиторий в Git: что это простыми словами

·5 минут·

Репозиторий — одно из центральных понятий в 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 для работы с частью репозитория.


Читай также #