В современном мире наблюдается постоянное развитие информационных технологий, который требует постоянного совершенствования существующих программных продуктов, с помощью которых происходит внедрение современных тенденций развития сферы ИТ. Одним из методов совершенствования является модификация существующих программ. Это в свою очередь порождает проблему отслеживания появления новых версий модификации и определённых изменении, которые происходят в пределах одной модификации. Эта проблема сводится к созданию систем контроля версий файлов, как программ, так и документов. До появления таких систем большинство разработчиков, чтобы управлять версиями, просто хранили копии предыдущих версий файлов. То есть без наличия этих систем разработчикам нужно было выполнять определенное количество рутинной работы по отслеживания обновлений и модификаций программ и документов. Такой подход был распространен, потому что имел довольно простую реализацию. Однако с увеличением объемов программных продуктов, повышения их сложности, разветвления, появлением технологий совместной разработки (дистанционно с использованием сети Интернет) такой метод потерял свою актуальность.
В последнее время для обеспечения эффективности работы разработчиков ПО используются системы управления версиями файлов. Система управления версиями – это система, которая отслеживает и фиксирует изменения, которые происходят в файлах, позволяет на последующих этапах модификации использовать информацию о предыдущих изменения.
На первом этапе разработки систем данного класса использовались так называемые локальные системы управления версиями, в основе которой лежит робота с базой данных, в которой хранятся все изменения файлов (рисунок 1).
Рисунок 1 - Общая схема локальной СУВ
Самой популярной системой управления версиями данного типа является система RCS. В основе этой системы лежит работа с наборами патчей изменениями (патч – файл что описывают отличие между файлами) которые хранятся в cпециальном формате. Это дает возможность повторно компилировать любой файл в любое время.
С появлением возможности одновременной работы, определенной группы разработчиков над определенными файлами возникла проблема необходимости одновременно отслеживать изменения всех разработчиков, которые работают на разных компьютерах которые объединённые в локальную сеть. Это привело к тому что начали создавать централизованные системы управления версиями (ЦСУВ). Основой такой системы служить центральный сервер, на котором хранятся все файлы, в которые вносятся изменения, и клиентов, которые получаются копии файлов с сервера (рисунок 2). Это был общий стандарт систем управления версиями достаточно длительное время.
Рисунок 2 - Общая схема централизованной СУВ
Такой подход имеет ряд преимуществ. Все знают, кто и чем занимается в проекте. В администраторов есть четкий контроль над тем, кто и что может делать, и администрировать ЦСУВ гораздо легче, чем локальные базы на каждом клиенте.
Но в таких системах есть несколько серьезных недостатков. Первый из них это централизованный сервер который является уязвимым местом всей системы. Если вдруг сервер выходит из строя, то в течение этого времени пользователи не могут взаимодействовать, и никто не может сохранить новые версии файлов. Второй это когда повреждается центральная база данных, все пользователи теряют всю историю проекта, за исключением определенного количества рабочих версий, сохранившихся на клиентских машинах разработчиков.
Следующим шагом в разработке СУВ стало появление распределенных систем управления версиями (рисунок 3). В случае, когда сервер выходит из строя, любой клиентский репозиторий может быть скопирован обратно на сервер, чтобы восстановить базу данных. Каждый раз, когда клиент получает последнюю версию файлов, создается полная копия всех данных.
Рисунок 3 - Общая схема централизованной РСУВ
В этих систем можно работать с удаленными репозиториями, также можно одновременно работать с различными группами разработчиков в рамках одного проекта. В одном проекте можно одновременно вести несколько типов рабочих процессов.
В последнее время наиболее распространенной является система управления версиями Git. На базе Git удобно создавать специализированные системы контроля версий.
Git поддерживает быстрое разделение и слияние версий, включает инструменты для визуализации и навигации по нелинейной истории разработки.
Git предоставляет каждому разработчику локальную копию всей истории разработки, изменения копируются из одного репозитория в другой.
У каждого пользователя Git, есть свой локальный репозиторий, позволяющий управлять версиями. Это позволяет обмениваться данными с другими пользователями.
Также при работе с Git создаётся центральный репозиторий, с которым синхронизируются все пользователи.
Работа над проектом может вестись в нескольких ветках. Ветки можно полностью или частично объединяться, уничтожаться, или откатывать до нужного изменения в файле.
В итоге можно сказать что Git является достаточно эффективным решение для проектирования систем управления версиями. С его помощью возможно не только управления версиями программного обеспечения, но и создание систем управления документооборота в законодательной и государственной сферах деятельности человека.
Библиографический список
- Richard E. Silverman. Git Pocket Guide. O’Reilly Media 2013.
- Travis Swicegood. Pragmatic Guide to Git. Pragmatic Bookshelf 2010.
- Karl Fogel, Moshe Bar. Open Source Development with CVS. Paraglyph Press 2003.
- Scott Chacon. Git Internals, Topfunky Corporation 2008.
- Jon Loeliger, Jon Loeliger. Version Control with Git: Powerful tools and techniques for collaborative software development. O’Reilly Media 2012.
- Travis Swicegood. Pragmatic Version Control Using Git, Pragmatic Bookshelf 2008.
- Ben Lynn. Git Magic. Create Space Independent Publishing Platform 2010.
- Bryan O’Sullivan. Mercurial: The Definitive Guide. O’Reilly Media 2009.