Система контроля версий
Узнайте о важности контроля версий, преимуществах VCS, трёх типах систем контроля версий и посмотрите инфографику

Система контроля версий (VCS) записывает изменения набора файлов с течением времени, чтобы вы могли вернуться к любой конкретной версии позднее. На этой странице объясняется, что такое контроль версий, почему команды разработчиков полагаются на него, три семейства инструментов VCS (локальные, централизованные и распределённые) и конкретные преимущества, которые каждый из них даёт. Это концептуальная основа для всего остального в этой книге — как только вы поймёте, зачем существует контроль версий, такие команды, как git init, git commit и git branch, станут намного понятнее.
Что такое контроль версий?
Контроль версий — это система, которая записывает изменения исходного кода (или любого набора файлов), чтобы команда могла управлять тем, как этот код развивается с течением времени. Вместо того чтобы перезаписывать файлы и терять предыдущее состояние, система хранит каждое значимое изменение как ревизию, к которой можно вернуться.
Конкретно, контроль версий позволяет вам:
- Путешествовать назад во времени — восстанавливать любую более раннюю версию файла или всего проекта.
- Видеть, кто что изменил и зачем — каждая ревизия содержит имя автора, дату и сообщение.
- Работать параллельно — разделять независимые направления работы на ветки и объединять их позже с помощью слияния.
- Сравнивать версии — просматривать точные различия между любыми двумя точками истории с помощью diff.
Почему это важно
Контроль версий необходим, как только к кодовой базе прикасается более одного человека — или более одной машины, или даже просто вы сами со временем. Он позволяет нескольким разработчикам работать независимо, не перезаписывая работу друг друга, а затем интегрировать эти изменения отслеживаемым способом. Он также превращает «я что-то сломал и не знаю что» в вопрос, на который можно ответить: вы можете найти точное изменение, которое привело к ошибке, и отменить именно это изменение.
Даже в сольном проекте контроль версий даёт вам страховочную сеть. Вы можете экспериментировать свободно, зная, что каждое рабочее состояние сохранено и может быть восстановлено.
Системы контроля версий (VCS)
Система контроля версий (VCS) — также называемая управлением исходным кодом (SCM) или системой управления ревизиями (RCS) — это программный инструмент, реализующий контроль версий: он отслеживает изменения, хранит историю и координирует совместную работу.
Три типа систем контроля версий
Исторически инструменты VCS делятся на три семейства, каждое из которых решает проблему, оставшуюся от предыдущего.
1. Локальные системы контроля версий
Локальная VCS хранит всю историю в простой базе данных на одной машине. Она была создана для предотвращения повседневных ошибок, таких как редактирование не того файла или потеря предыдущей версии при ручном копировании директорий. Одним из наиболее популярных локальных инструментов является RCS (Revision Control System), который распространяется и по сей день. RCS хранит наборы патчей (различия между версиями), чтобы можно было воссоздать любой файл в том виде, в каком он был в любой момент времени.
Ограничение очевидно: история хранится на одном компьютере, поэтому она не предоставляет реального взаимодействия и никакой защиты в случае отказа диска.

2. Централизованные системы контроля версий
Централизованная VCS (CVCS) хранит все версионированные файлы на одном центральном сервере, а клиенты «извлекают» файлы из этого места. Это решило проблему совместной работы: все могли видеть, в определённой степени, что делают другие, а администраторы имели единую точку управления. На протяжении многих лет это было стандартом. Распространённые примеры: CVS, Subversion (SVN) и Perforce.
Компромисс — единая точка отказа. Если центральный сервер выходит из строя, никто не может делать коммиты или сотрудничать; если его диск потерян без резервной копии, вся история проекта может быть утрачена вместе с ним.

3. Распределённые системы контроля версий
В распределённой VCS (DVCS) каждый клиент не просто извлекает последние файлы — он полностью зеркалирует репозиторий, включая полную историю. Если сервер выходит из строя, клон любого клиента может быть отправлен обратно для его восстановления. Это также делает большинство операций быстрыми и доступными в автономном режиме, поскольку полная история хранится локально. Примеры включают Git, Mercurial, Bazaar и Darcs.
Это модель, которую использует Git, и именно поэтому вы можете делать коммиты, создавать ветки, просматривать историю и выполнять diff без какого-либо сетевого подключения. Остальная часть этой книги подробно охватывает Git — начните с Что такое Git? и установки Git.
Преимущества систем контроля версий
Основные преимущества VCS:
- Долгосрочная история изменений. Каждое создание, изменение и удаление файла записывается на протяжении всего жизненного цикла проекта. Это позволяет вам вернуться к предыдущей версии для анализа ошибок и исправления проблем.
- Ветвление и слияние. Ветвление позволяет разработчикам работать независимо, не мешая друг другу. Слияние объединяет эту работу и выявляет конфликты, чтобы их можно было разрешить осознанно.
- Отслеживаемость. Вы можете отследить каждое изменение, снабдить его сообщением, описывающим его назначение, и связать с инструментами управления проектом и отслеживания ошибок.
Контроль версий на практике
Вам не нужен сервер или команда, чтобы увидеть контроль версий в действии — Git отслеживает историю прямо на вашей машине. Приведённые ниже команды выполняются полностью локально: они создают репозиторий, записывают две версии файла, а затем запрашивают у Git историю этого файла. Попробуйте их в терминале после установки Git.
# Create a fresh project and turn it into a Git repository
mkdir vcs-demo && cd vcs-demo
git init -q
# Tell Git who is making the changes (required for a commit)
git config user.email "[email protected]"
git config user.name "You"
# Record the first version
echo "line one" > notes.txt
git add notes.txt
git commit -q -m "Add notes.txt"
# Change the file and record a second version
echo "line two" >> notes.txt
git commit -q -am "Add a second line"
# Ask version control for the history of this file
git log --onelineВывод git log --oneline показывает две ревизии, начиная с новейшей — каждая с коротким хешем коммита и сообщением, которое вы написали:
3f8a1c2 Add a second line
9b2e4d7 Add notes.txt(Ваши хеши будут отличаться, поскольку они вычисляются из содержимого и временной метки.) Эта история и есть суть контроля версий: каждая версия сохранена, помечена и может быть восстановлена. Чтобы узнать больше, смотрите git log и git commit.