Системы контроля версий - Глоссарий
Что такое системы контроля версий?
Основные функции и задачи
Что такое системы контроля версий? Объясняем на примере. В процессе работы над проектом приходится постоянно вносить правки, что приводит к созданию обновленного релиза. Наступает момент, когда спустя десятки редакций приходит понимание, что нужно вернуть один из удаленных кусков кода. Как быть, если информация удалена еще, например, неделю назад, и Ctrl+Z уже не вернет нужное? Решением в таком случае станет сохранение истории всех вносимых в продукт изменений, чем и занимаются системы контроля версий (СКВ или Version Control System, VCS).
Что такое VCS
Система контроля версий (Version Control System, VCS) — это инструмент, который сохраняет историю изменений, внесенных в файлы проекта. Представьте, что работаете над большим файлом и хотите вернуться к предыдущему варианту. VCS сохраняет информацию о том, что конкретно изменилось, кто это сделал и когда. Таким образом, всегда можно откатить изменения к нужной точке работы над проектом и увидеть, каким он был до внесенных изменений.
Для чего нужна VCS?
- Возвратиться к предыдущим версиям. Если что-то ломается после внесения изменений, можно легко откатить изменения до предыдущей рабочей версии.
- Совместно работать. Когда над проектом трудится команда, важно понимать, кто и что менял. VCS помогает избегать конфликтов между изменениями участников.
- Изменять код, не мешая другим пользователям. Каждый пользователь может вносить изменения в свою рабочую копию, не затрагивая работу других участников проекта.
- Хранить журнал изменений. Всегда можно проверить, какие изменения внесены, когда и кем. Полезное свойство, если требуется выяснить причину появления той или иной ошибки.
- Сохранять безопасность данных. Даже если файлы будут случайно удалены или повреждены, можно восстановить их из репозитория VCS.
Как работает VCS?
Концепция заключается в создании «снимков» состояния файлов проекта. Эти снимки называются коммитами. Каждый коммит содержит сведения об изменениях, авторах и времени создания. Коммиты сохраняются в специализированном хранилище — репозитории.
Когда вносите изменения, сначала сохраняете их локально, а затем отправляете в общий репозиторий. Остальные члены команды могут загрузить последние изменения и продолжить работу над проектом. Помимо этого, VCS позволяет создавать ветки, что удобно для параллельного выполнения работы над функциями без риска повредить основной код. Впоследствии можно объединить эти ветки в единую версию.
Таким образом, VCS — незаменимый инструмент для каждого разработчика в работе над серьезным проектом, который помогает контролировать процесс и делает разработку проще и безопаснее.
Зачем нужна система контроля версий?
При внесении правок важно не потерять в процессе действующую работоспособную версию (release). Чаще всего для этих целей создается новая папка и дальнейшая работа ведется уже именно с ней.
Работа продолжается, копятся все новые и новые папки. В результате наступает момент, когда откат к предыдущим релизам усложняется, а контролировать вносимые правки становится все труднее.
Типы систем контроля версий
Локальные системы контроля версий
Чтобы контролировать обновления, исполнители часто создают новую папку с отметкой времени, например. Это распространенный и довольно простой способ, но крайне ненадежный. Всегда можно ошибиться папкой и случайно записать информацию в другой документ или скопировать не те файлы.
Программисты для решения этой проблемы придумали локальные version control system с простой базой данных и записями всех изменений подконтрольных файлов.
Наиболее популярная локальная СКВ — RCS. Эта система в специальном формате хранит на диске наборы различий между файлами (патчи) и способна восстановить состояние каждого. Воссоздание происходит путем последовательного применения всех патчей.
Централизованные VCS
Централизованные СКВ — это приложения, в которых история релизов хранится на удаленном сервере, а рабочий код на нескольких компьютерах. Наиболее известны программные продукты CVS и Subversion.
Распределенные VCS
Распределенные СКВ организуют хранение рабочего кода на локальных компьютерах, а истории — на удаленном сервере и на всех этих компьютерах. Разработчики могут работать автономно благодаря использованию локальных копий. К популярным распределенным СКВ относятся системы контроля версий Git и Mercurial.

Основные термины и определения
VCS — что это такое?
VCS — это программное обеспечение для упрощения работы с разными релизами проекта. Version Control System помогает вернуться к ранним изменениям и определить автора правок.
Что такое Git и как он работает?
Git — популярная программа распределенной VCS. Разработана была для процессов над ядром ОС Linux, а сейчас доступна на большинстве ОС.
Релизы хранятся в локальном репозитории на компьютере программиста и удаленном на сервере. Синхронизация информации между репозиториями происходит через гит-хостинги. Например, Github или GitLab.
Сохраненные релизы образуют «дерево» проекта и размещаются в репозитории (repository). Последовательное сохранение файлов образует прямое дерево. Если приходится совершенствовать и сохранять старые release, то образуется разветвленное дерево.
Все сохранения на ветках наслаиваются на исходный документ, при этом можно работать одновременно с любой веткой и фиксировать результат в последний релиз.
Разработчики выбирают GitHub, когда нет желания изучать консоль. Сервис основан на распределенной vcs и отлично подходит новичкам, так как содержит тысячи идей для совместной software development (разработки ПО).
Лог изменений (Git log)
Git log — это команда, с помощью которой мониторят и фильтруют историю коммитов («снимков» текущего состояния проекта, commit history), отслеживают правки.

Чтобы получить оперативную сводку о коммитах git log, применяют --graph и --format.
git log --graph --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%an%C(reset)%C(bold yellow)%d%C(reset) %C(dim white)- %s%C(reset)' --all
Теперь дерево выглядит даже разветвленным:

Коммит, репозиторий и ветвление
Git commit (коммит) означает сохранение редакций в файловой структуре и создание текущей release проекта. Четкое и краткое сообщение коммита описывает, какие изменения внесены в source code (исходный код) и с какой целью.
Репозиторий располагают на удаленном сервере в облаке, где образуется централизованное хранилище процесса. Полная копия repository называется локальной.
Ветвление помогает изолировать обновления, тестировать новые функции благодаря параллельной копии — ветке. Исправлять ошибки можно не меняя master-ветки (основной базы кода).

Преимущества использования
СКВ помогает разработчикам программного обеспечения работать продуктивнее и быстрее, а командам — сохранять гибкость в нестандартных условиях.
Безопасность данных
VCS помогает исключить нарушение работы программы и защищает код от потери. Благодаря тому, что данные хранятся на удаленном сервере, исключается случайное или намеренное удаление информации с локального компьютера, а также правки важных файлов или функций.
Совместная работа над проектом
Благодаря VCS каждый участник выполняет свою работу, а обновленные результаты объединяются в один релиз, что упрощает collaboration (совместную работу).
Отслеживание изменений и управление версиями
СКВ помогает разработчикам отследить изменения (track changes) и понять, что было отредактировано, кем и когда. А также помогает вернуться при необходимости к контрольной точке, сопоставить source code с текущим и обновить master-ветку после ревью.