Система контроля версий (VCS) - это программа, которая отслеживает изменения файлов и хранит историю этих изменений. Любая программа, которая делает это автоматически, попадает под определение VCS - от простых утилит вроде RCS до распределённых систем вроде Git.
Зачем нужна
Без VCS приходится хранить версии файлов вручную:
report.docx
report_v2_FINAL.docx
report_v3_СРОЧНО.docx
Это работает на одном файле и одном человеке. Перестаёт работать, когда проект - это сотни файлов и несколько разработчиков.
VCS решает три проблемы:
- Имена не теряют смысл - версии помечаются через дату, автора, сообщение, а не через файловые суффиксы.
- Совместная работа - несколько человек правят одни и те же файлы, система помогает с конфликтами.
- Экономия места - хранится не полная копия каждой версии, а разница (или дедуплицированный снимок, см. snapshot-vs-delta).
Три поколения
Локальные
Хранят историю в служебной директории рядом с файлами. RCS (1982), SCCS (1972). Преимущество - простота. Недостаток - вся история на одной машине, диск умер → история пропала.
Централизованные
История на центральном сервере. У разработчиков - только текущий снимок. CVS (1986), Subversion (2000), Perforce. Преимущество - совместная работа. Недостаток - зависимость от сервера и сети.
Распределённые
Полная копия истории у каждого разработчика. См. distributed-vcs. Git (2005), Mercurial (2005), Bazaar (2005). Преимущество - работа без сети, дешёвые ветки, надёжность. Недостаток - чуть сложнее ментальная модель.
Какую выбрать
В 2026 году выбор для большинства новых проектов сводится к Git - вокруг него крупнейшая экосистема хостингов (GitHub, GitLab, Bitbucket) и инструментов. Остальные системы живут в нишах:
- Git - де-факто дефолт в open-source и большинстве компаний.
- Mercurial - исторически использовали Mozilla и Facebook, сейчас встречается реже. Технически - не хуже Git.
- Perforce - крупные игровые студии, киноиндустрия, где много больших бинарных файлов.
- SVN - старые корпоративные проекты, которые не мигрируют «потому что работает».
Эта книга - про Git. Эквиваленты понятий из других VCS - в приложении B.