DevOps & CI/CD

Системы контроля версий

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.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер