Системы контроля версий
VCS — инструменты, хранящие историю изменений файлов проекта и позволяющие команде работать параллельно без потери правок.
Что такое система контроля версий
Система контроля версий (VCS, Version Control System) — инструмент, который хранит историю изменений файлов: кто, когда и что поменял, зачем и как вернуться назад. Помимо истории VCS решает вторую, не менее важную задачу — параллельную работу: несколько человек правят один проект, а система сводит их изменения и явно показывает конфликты вместо молчаливого затирания.
Без VCS проект живёт в папках project_final, project_final_2, project_final_ГОТОВО, а на вопрос «когда сломалось и кто это выкатил» ответа нет. VCS отвечает на него за секунды.
Расшифровка сокращений: VCS — Version Control System, DVCS — Distributed VCS (распределённая), SCM — Source Control Management, часто используется как синоним.
Что даёт VCS
- История: любое состояние проекта восстанавливается, каждое изменение подписано автором и датой.
- Ветвление: рискованная переделка идёт в стороне и не мешает остальным.
- Слияние: параллельные правки сводятся автоматически, спорные места помечаются как конфликт.
- Ответственность:
git blameпоказывает автора конкретной строки — не ради наказания, а чтобы знать, у кого спросить. - Основа автоматизации: CI/CD запускается по коммиту, GitOps выкатывает инфраструктуру из репозитория. Без VCS ни того ни другого не существует.
Централизованные и распределённые
Главное деление в мире VCS.
| Централизованные (CVCS) | Распределённые (DVCS) | |
|---|---|---|
| Где история | Только на сервере | Полная копия у каждого |
| Работа без сети | Почти невозможна | Полноценная |
| Скорость log/diff | Запрос к серверу | Локально, мгновенно |
| Ветвление | Дорогое, редкое | Дешёвое, повседневное |
| Отказ сервера | Работа встала | Все продолжают работать |
| Представители | SVN, CVS, Perforce | Git, Mercurial |
В централизованной системе сервер — единственный источник истины и единственная точка отказа. В распределённой у каждого разработчика на диске лежит весь репозиторий с полной историей, а сервер — просто общая точка синхронизации, которую при желании можно поднять заново из любой копии.
Основные системы
Git — фактический стандарт. Создан в 2005 году для ядра Linux, распределённый, очень быстрый, дешёвое ветвление. Экосистема вокруг него (GitHub, GitLab, Bitbucket, CI, IDE) на порядок больше, чем у всех остальных вместе.
SVN (Subversion) — централизованная, была стандартом до Git. Ещё встречается в легаси и там, где нужен частичный чекаут: SVN умеет выкачать одну папку из огромного репозитория, чего Git традиционно не позволял.
Mercurial (hg) — распределённая, идеологически близка к Git, но проще и строже. Проиграла борьбу за экосистему; Bitbucket убрал её поддержку в 2020 году.
Perforce, Plastic SCM — живы в геймдеве: хорошо работают с бинарными файлами весом в гигабайты (текстуры, модели, сцены), с чем Git справляется плохо даже с LFS.
Что версионируют кроме кода
- Инфраструктуру: манифесты Kubernetes, плейбуки Ansible, Terraform — подход IaC. История коммитов становится журналом изменений production.
- Конфигурации: Nginx, systemd-юниты,
.env-шаблоны (без самих секретов — им место в Vault). - Миграции БД: схема базы едет вместе с кодом, который её использует.
- Данные и модели: обычная VCS для гигабайтных весов не годится — используют Git LFS, DVC или model registry.
- Документацию: docs-as-code, тексты рядом с кодом и с тем же code review.
Что не класть в репозиторий
Пароли, ключи, токены, дампы с персональными данными. Попавший в историю секрет считается скомпрометированным навсегда: удаление из последнего коммита ничего не решает — он остаётся в истории, во всех клонах у коллег и в кешах хостинга. Единственный корректный ответ — отозвать и перевыпустить ключ, а на будущее закрыться .gitignore и сканером секретов в CI.
Связанные термины
- Git — стандарт де-факто среди VCS
- Git-репозиторий — где физически хранится история
- Команды Git — повседневные операции
- Git Flow — как командой пользоваться ветками
- GitHub — хостинг репозиториев
- Монорепозиторий — стратегия хранения нескольких проектов
Готовы запустить GPU-задачу?
Запустить GPU-сервер