1. Виды систем контроля версий
Системы контроля версий (СКВ) — это программные инструменты, помогающие командам разработчиков управлять изменениями в исходном коде с течением времени.
1.1 Централизованные системы (CVCS)
Примеры: CVS (Concurrent Versions System), SVN (Subversion), Perforce.
- Единый центральный сервер содержит все версии файлов и историю изменений.
- Разработчики работают с локальными копиями, которые синхронизируются с сервером.
- Ограничения: уязвимость к отказам сервера, медленная скорость при слиянии, нет работы офлайн.
1.2 Распределённые системы (DVCS)
Примеры: Git, Mercurial, Bazaar.
- Каждый разработчик имеет полную копию репозитория, включая всю историю изменений.
- Репозиторий может быть скопирован (клонирован) на локальный компьютер — работа без доступа к серверу.
- Большая гибкость, устойчивость к отказам, высокая производительность.
1.3 Локальные системы
Пример: RCS (Revision Control System). Работают с отдельными файлами на одном компьютере. Базовый уровень контроля версий — не подходят для командной работы.
2. Создание Git
История Git началась в 2005 году, когда Линус Торвальдс, создатель ядра Linux, столкнулся с необходимостью эффективного управления версиями кода для своего проекта.
До этого использовалась система BitKeeper, но возникли разногласия с её разработчиками относительно доступа к коду. Линус решил создать собственную систему контроля версий, придерживаясь ключевых принципов: скорость, простота, распределённость.
Благодаря эффективности и гибкости Git стал широко принятым стандартом в индустрии разработки программного обеспечения.
3. Основные принципы и функции Git
Принципы
- Распределённая система: Каждый разработчик имеет полную копию репозитория — работа автономно, без зависимости от центрального сервера.
- Система снимков (Snapshots): Git сохраняет снимки проекта в разные моменты времени, а не отслеживает изменения файлов (как SVN). Каждый коммит — это снимок состояния всех файлов.
- Эффективность и скорость: Git оптимизирован для работы с большими проектами за счёт локального хранилища — большинство операций не требует сети.
Функции
- Управление версиями: отслеживание изменений и возврат к предыдущим версиям проекта.
- Ветвление и слияние (Branching and Merging): изолированная разработка функций в отдельных ветках с последующим объединением в основную ветку (main/master).
- Работа с удалёнными репозиториями: синхронизация локального и удалённого репозиториев через HTTP, SSH и другие протоколы.
- Контроль доступа и авторства: каждый коммит содержит информацию об авторе (имя, email, дата).
4. Отличие Git от GitHub
Git
- Система контроля версий (СКВ)
- Разработана Линусом Торвальдсом
- Работает локально на компьютере разработчика
- Командная строка и графические интерфейсы
- Открытый исходный код, бесплатный
GitHub
- Веб-платформа для хостинга Git-репозиториев
- Принадлежит компании Microsoft
- Социальные и совместные функции
- Pull Requests, Issues, Actions (CI/CD)
- Интеграция с инструментами разработки (IDE)
5. Установка и настройка
Для пользователей Windows удобен Git Bash; для macOS — стандартный терминал (Git входит в xcode command line tools).
Перед первым использованием необходимо настроить имя и email — они будут отображаться в каждом коммите:
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
Флаг --global сохраняет настройки для всех репозиториев на данном компьютере в файл ~/.gitconfig.
6. git init и директория .git
Команда git init инициализирует новый репозиторий Git в текущем каталоге. После выполнения:
- Создаётся скрытая директория
.gitсо всеми данными репозитория. - Создаётся пустой репозиторий без файлов и истории коммитов.
- Создаётся файл конфигурации
.git/config. - Создаётся пустой индекс (staging area) для подготовки изменений к коммиту.
Структура директории .git
Директория .git содержит все данные, необходимые Git для управления репозиторием:
- config — настройки репозитория (информация о пользователе, настройки remote)
- objects/ — хранилище объектов: все файлы, коммиты, теги хранятся здесь в виде объектов
- index — список изменений, готовых к коммиту (staging area)
- refs/ — ссылки на ветки, теги и другие объекты в репозитории
- hooks/ — скрипты, которые запускаются на определённых этапах работы (pre-commit, post-commit и др.)
- Другие вспомогательные файлы: журналы, информация о подмодулях и т.д.
.git/ вручную. Git самостоятельно управляет этой директорией. Случайное изменение может повредить репозиторий.
7. Основные стадии работы с Git
Типичный рабочий процесс с Git включает следующие стадии:
-
git clone — скачать существующий репозиторий:
git clone <repo_url>
Создаёт локальную копию репозитория из GitHub (или другого remote). -
git add — добавить изменения в staging area:
git add README.md— конкретный файл
git add .— все изменённые файлы -
git commit — зафиксировать изменения:
git commit -m "Описание изменений"
Создаёт снимок текущего состояния проекта. -
git push — отправить коммиты в удалённый репозиторий:
git push origin main -
git pull — получить изменения из удалённого репозитория:
git pull origin main
Комбинирует fetch + merge.
git add → git commit → git push. Пропуск git add — самая частая ошибка новичков: файлы не попадут в коммит.
8. Современное дополнение: git switch
В Git 2.23+ появилась команда
git switch — более интуитивная альтернатива git checkout для переключения между ветками:
# Старый способ (из лекции)
git checkout main
# Современный синтаксис (git 2.23+)
git switch main
git switch -c new-branch # создать и переключиться
Обе команды работают, но git switch специализирована только на ветках, что делает намерение явным. На уроке 13 ветки изучаются поверхностно — подробно о git switch на занятии 16.