В статье авторы определяют важность использования распределенных систем контроля версий для разработки программного продукта.
Ключевые слова: VCS, CVCS, DVCS, RCS, система контроля версий, контроль версий.
Для разработки программного продукта необходимо использовать систему контроля версии. Контроль версий — это система, которая записывает изменения в файл или набор файлов с течением времени, чтобы вы могли впоследствии вызывать определенные версии. Различают 3 вида контроля версии:
- Локальная система контроля версий
Многие люди выбирают метод контроля версий — копировать файлы в другой каталог. Этот подход очень распространен, потому что он очень прост, но он также невероятно подвержен ошибкам. Легко забыть, в каком каталоге вы находитесь, и случайно записать в неправильный файл или скопировать файлы, которые вы не хотите использовать.
Чтобы решить эту проблему, программисты давно разработали локальные VCS, которые имели простую базу данных, в которой все изменения в файлах находились под контролем версий.
Рис. 1. Схема локальной системы контроля версий
Одним из самых популярных инструментов VCS была система RCS, которая до сих пор распространяется на многих компьютерах. RCS работает, сохраняя наборы патчей (то есть различия между файлами) в специальном формате на диске; затем он может воссоздать, как любой файл выглядел в любой момент времени, сложив все патчи.
- Централизованная система контроля версий
Следующая важная проблема, с которой сталкиваются люди, заключается в том, что им необходимо сотрудничать с разработчиками других систем. Для решения этой проблемы были разработаны централизованные системы контроля версий (CVCS). Эти системы (такие как CVS, Subversion и Perforce) имеют один сервер, который содержит все версионные файлы, и несколько клиентов, которые извлекают файлы из этого центрального места. На протяжении многих лет это был стандарт для контроля версий.
Рис. 2. Схема централизованной системы контроля версий
Эта настройка предлагает много преимуществ, особенно перед локальными VCS. Например, каждый в определенной степени знает, что делают все остальные в проекте. Администраторы имеют детальный контроль над тем, кто что может делать, и гораздо проще администрировать CVCS, чем иметь дело с локальными базами данных на каждом клиенте. Тем не менее, эта установка также имеет некоторые серьезные недостатки. Наиболее очевидной является единственная точка отказа, которую представляет централизованный сервер. Если этот сервер отключается в течение часа, то в течение этого часа никто не сможет вообще сотрудничать или сохранять версионные изменения во всем, с чем они работают. Если жесткий диск, на котором находится центральная база данных, поврежден и надлежащее резервное копирование не было сохранено, вы потеряете абсолютно все — всю историю проекта, за исключением того, что отдельные снимки будут на их локальных компьютерах. Локальные системы VCS страдают от этой же проблемы: всякий раз, когда у вас есть вся история проекта в одном месте, вы рискуете потерять все.
- Распределенная система контроля версий
Именно здесь вступают в действие распределенные системы контроля версий (DVCS). В DVCS (например, Git, Mercurial, Bazaar или Darcs) клиенты не просто проверяют последний снимок файлов; скорее они полностью отражают хранилище, включая его полную историю. Таким образом, если какой-либо сервер умирает, и эти системы сотрудничают через этот сервер, любое из клиентских репозиториев может быть скопировано обратно на сервер для его восстановления. Каждый клон — это полная резервная копия всех данных.
Рис. 3. Схема распределенной системы контроля версий
Кроме того, многие из этих систем прекрасно справляются с наличием нескольких удаленных репозиториев, с которыми они могут работать, поэтому вы можете одновременно работать с разными группами людей по-разному в рамках одного проекта. Это позволяет настроить несколько типов рабочих процессов, которые невозможны в централизованных системах, например, иерархические модели.
На рынке лидирует система контроля версии — Git. Также для работы с ней есть инструмент Gitlab. GitLab — веб-инструмент жизненного цикла DevOps с открытым исходным кодом, представляющий систему управления репозиториями кода для Git с собственной вики, системой отслеживания ошибок, CI/CD пайплайном и другими функциями.
У распределенной системы контроля версий больше плюсов для использования в разработке программных продуктов, чем другие системы контроля версий, что позволяет говорит о необходимости её использования.
Литература:
1. Jon Loeliger, Matthew McCullough Version Control with Git: Powerful tools and techniques for collaborative software development — 2 nd edition. — O’Reilly, 2012. — 679 p.