Вы находитесь на странице: 1из 11

Кукарцев Владислав Викторович

Kukartsev Vladislav Viktorovich


Кандидат технических наук, доцент кафедры информатики
Candidate of Science, Senior Lecturer in Informatics
Бадарчы Саян Аркадьевич
Badarchy Sayan Arkadievich
Студент
Student
Сибирский федеральный университет
Siberian Federal University

СРАВНЕНИЕ СИСТЕМ КОНТРОЛЯ ВЕРСИЙ: GIT, MERCURIAL, CVS


И SVN
COMPARISON OF VERSION CONTROL SYSTEMS: GIT, MERCURIAL,
CVS AND SVN

Аннотация на русском языке: Статья посвящена системам контроля версий. Автор


раскрывает понятие «система контроля версий», рассказывает о двух типах систем
контроля версий. В статье описываются четыре наиболее популярные системы контроля
версий и проводится сравнительный анализ этих систем.
Summary in English: The article is devoted to version control systems. The author
reveals the concept of "version control system", talks about two types of version control systems.
The article describes the four most popular version control systems and compares these systems.
Ключевые слова: Система контроля версий, Git, Mercurial, CVS, SVN, Apache,
разработка ПО, репозиторий.
Key words: Version control system, Git, Mercurial, CVS, SVN, Apache, software
development, repository.

Введение
Разработка программного обеспечения (ПО) достаточно трудоёмкий
процесс. Любое ПО, исключая совсем небольшие программы, необходимо
поддерживать. Исходный код, файлы сборки и конфигураций, а также
документацию требуется отслеживать, то есть вести историю изменений.
Особенно сейчас, когда рынок вынуждает создателей ПО
разрабатывать несколько версий продукта, ориентированных на различные

платформы. Поддержка нескольких версий ПО ㅡ непростая задача. Создавая

и внося изменения в «основную» версию продукта, следует также убедиться,

Международный научный журнал «Синергия наук»


что и «побочные» версии продукта обновлены. С течением времени процесс
отслеживания и внесения изменений только усложняется.
Для этих целей используются системы контроля версий. Выбор
подходящей системы значительно облегчит процесс поддержки ПО и
поможет избежать множества ошибок. Цель и задача данной статьи
познакомить читателя с наиболее популярными системами контроля версий и
дать сравнительный обзор на них.

Системы контроля версий


Система контроля версий — это система, которая регистрирует все
изменения в файлах, а в дальнейшем позволяет вернуться к их более ранним
версиям и определить, кем и когда были сделаны конкретные изменения.
Существует два типа систем контроля версий: централизованные и
распределённые.
В централизованных системах контроля версий (CVS [1], Subversion[2],
Perforce) есть центральный сервер, на котором хранятся все данные, и ряд
клиентов, получающих из него копии файлов. В таких системах всегда
понятно, кто чем занимается в проекте, и их проще администрировать.
Распределённые системы контроля версий (Git [3], Mercurial [4],
Bazaar) вместо традиционной клиент-серверной модели используют
распределённую, особенностью которой является то, что все изменения
хранятся в локальном хранилище на компьютере и при необходимости
синхронизируются с другими. В этом случае устраняется зависимость от
центрального сервера, можно вести работу даже без сетевого соединения с
ним.
Существует много различных систем контроля версий, но в данной
статье мы рассмотрим только четыре наиболее популярных из них [5][6]. Это
Git, Mercurial, Concurrent Versions System (CVS) и Apache Subversion (SVN).

Международный научный журнал «Синергия наук»


Основные понятия
Современные системы контроля версий позволяют вести разработку в
нескольких «ветках». Поясним это понятие на примере. Предположим, мы
разрабатываем программу для просмотра графических изображений. Перед

началом разработки мы создали «ветку» master, предназначение которой ㅡ

хранение итоговых версий программы. В первой версии нашего продукта


можно просматривать изображения формата PNG. Но мы бы хотели, чтобы
наша программа позволяла также просматривать изображения в форматах:
JPG, BMP, TIFF, GIF. Допустим, что следующим мы хотим добавить
поддержку формате JPG. Мы понимаем, что внесение изменений в рабочий
продукт может привести к утрате функционала. Чтобы, в случае
возникновения проблем, не терять возможность просмотра изображений в
формате PNG, мы создаём новую «ветку» dev, изменения которой не
отразятся на «ветке» master. После разработки и тестирования нового
функционала, в том числе на совместимость с существующим, мы проводим
«слияние» «веток» dev и master. Вся история изменений dev переносится в
master. Таким же образом мы постепенно добавляем поддержку всех нужных
нам форматов.
Ниже объясняются ключевые термины, используемые в статье [7].
working copy — рабочая (локальная) копия документов.
repository, depot — хранилище.
revision — версия документа. Новые изменения (changeset) создают
новую ревизию репозитория.
check‐in, commit, submit — фиксация изменений.
check-­out, clone — извлечение документа из хранилища и
создание рабочей копии.

Международный научный журнал «Синергия наук»


update, sync — синхронизация рабочей копии до некоторого заданного
состояния хранилища (в том числе и к более старому состоянию,
чемтекущее).
merge, integration — слияние независимых коммитов.
conflict — ситуация, когда несколько пользователей сделали изменения
одного и того же участка документа.
head — самая свежая версия (revision) в хранилище.
origin — имя главного сервера.
branch (ветка) — направление разработки проекта, независимое от
других. Ветвь представляет собой копию части (как правило, одного
каталога) хранилища, в которую можно вносить свои изменения, не
влияющие на другие ветви. Документы в разных ветвях имеют одинаковую
историю до точки ветвления и разные — после неё. Изменения из одной
ветви можно переносить в другую.

Concurrent Versions System


Данная система существует с 80-х годов, она очень популярна как
среди разработчиков коммерческих продуктов, так и среди разработчиков
открытого программного обеспечения.
CVS выпущен под лицензией GNU, система позволяет пользователям
проверить код, над которым они будут работать, и записать изменения.
Первоначально CVS разрешал конфликты между двумя
программистами, позволяя работать над и обновлять только последнюю
версию кода. Это была первая попытка создать систему контроля версий,
причём в ней пользователь должен был быстро публиковать изменения,
чтобы быть уверенным, что его изменения будут приняты. В противном
случае обновление кода от другого пользователя могло не учесть его
изменений.

Международный научный журнал «Синергия наук»


В настоящее время CVS может обрабатывать «ветвящиеся» проекты,
что позволяет работать над разными версиями ПО параллельно.
Сервер CVS работает на Unix-подобных системах с
мультиплатформенным клиентским программным обеспечением. Считается,
что это самая зрелая система контроля версий, потому что она
совершенствовалась в течение длительного времени.
Плюсы:
• Используется в течение многих лет и считается зрелой
технологией
Минусы:
• Перемещение или переименование файлов не включает
обновление версии
• Угрозы безопасности при использовании символических ссылок
на файлы
• Операции, связанные с ветвлениями, требовательны к ресурсам

Apache Subversion
SVN был создан как альтернатива CVS, которая исправила бы
некоторые ошибки в системе CVS, сохраняя при этом обратную
совместимость с ней.
Как и CVS, SVN является свободным и открытым ПО с той лишь
разницей, что он распространяется по лицензии Apache, а не GNU.
Чтобы предотвратить повреждение базы данных, SVN использует
концепцию, называемую атомарными операциями. Либо все внесенные
изменения применяются, либо не применяются, что означает, что никакие
частичные изменения не нарушат целостности.
Многие разработчики переключились на SVN, поскольку эта система
была новее, использовала лучшие функции CVS и улучшала их.

Международный научный журнал «Синергия наук»


Операции «ветвления» CVS являются ресурсоёмкими, SVN устраняет
этот недостаток.
Критика SVN и CVS включает в себя более медленную скорость и
отсутствие распределённого контроля версий. Распределённый контроль
версий использует одноранговую (peer-to-peer) модель, а не
централизованный сервер для хранения изменений кода. В то время как
модель с одноранговым доступом будет работать лучше для глобальных
проектов с открытым исходным кодом, она может быть не идеальной в
других ситуациях. Недостатком выделенного серверного подхода является
то, что когда сервер не работает, ни один пользователь не может получить
доступ к коду.
Плюсы:
• Включает атомарные операции
• Более «дешёвые» операции «ветвления»
• Широкий выбор плагинов для интегрированных сред разработки
Минусы:
• Все ещё содержит ошибки, связанные с переименованием файлов и
каталогов

Git
Git использует радикально новый подход, который сильно отличается
от CVS и SVN.
Git разрабатывался с целью создания более быстрой и распределенной
системы контроля версий, которая бы решала проблемы CVS. Он разработан
в первую очередь для Linux и демонстрирует наивысшую степень
быстродействия именно там.
Он также поддерживает другие Unix-подобные системы и Windows.

Международный научный журнал «Синергия наук»


Git оснащён широким набором инструментов, помогающих
пользователям ориентироваться в истории изменений файлов. Каждый
репозиторий содержит всё дерево изменений, которое может быть полезно
при разработке без подключения к интернету.
Плюсы:
• Увеличение скорости работы
• «Дешёвые» операции «ветвления»
• Полное дерево истории доступно в автономном режиме
Минусы:
• Не оптимально для одиночных разработчиков
• Ограниченная поддержка Windows по сравнению с Linux

Mercurial
Разработка Mercurial началась почти одновременно с Git, и, так же как
и Git, она является распределённой системой контроля версий.
Для разработки ядра Linux требовалось внедрение системы контроля
версий. Конкурентами за это право были Git и Mercurial, которые начали
разрабатываться недавно. В итоге был выбран Git, что сделало Mercurial
изначально менее популярной системой. Тем не менее, это не означает, что
она не используется. Многие крупные компании используют её, в том числе
OpenOffice.org.
Она, в первую очередь, отличается от Git тем, что Mercurial в основном
реализуется на Python, а не на C.
Mercurial разделяет некоторые особенности с SVN, поэтому порог
вхождения для тех, кто уже знаком с SVN, будет ниже.
Плюсы:
Освоить легче, чем Git
Подробная документация

Международный научный журнал «Синергия наук»


Минусы:
Нельзя «слить» две основные ветки
Медленнее, чем Git

Сравнение
Для сравнительного анализа систем контроля версий воспользуемся
экспертным методом оценивания, результаты которого сведены в таблицу 1.
Таблица 1. Сравнительный анализ систем контроля версий
Название Скорость Тип Функциональные Докуме Поддерживае Цена Сумма
системы возможности нтация мые баллов
(копирование и платформы
перенос файлов/папок, (Unix,
отслеживание Windows,
изменений построчно) macOS)

CVS 1 балл 0 баллов 1 балл 1 балл 3 балла 1 балл 7 баллов

SVN 2 балла 0 баллов 2 балла 2 балла 3 балла 1 балл 10 баллов

Git 5 баллов 1 балл 3 балла 5 баллов 3 балла 1 балл 18 баллов

Mercurial 3 балла 1 балл 3 балла 3 балла 3 балла 1 балл 14 баллов

Скорость системы оцениваем по 5-балльной шкале. Согласно тестам


производительности систем контроля версий, Git является наиболее быстрой
из них. Затем идет Mercurial, а за ним SVN и CVS.
По-нашему мнению, распредёленная система имеет ряд преимуществ
перед централизованной. Во-первых, не требует постоянного подключения к
сети. Во-вторых, более надежная с точки зрения хранения данных. При
централизованном подходе в случае нарушения целостности данных на
сервере данные будут потеряны, чего не случится при распределённом
подходе, так как пользователи сохранят локальную копию репозитория. В-
третьих, удобство работы с несколькими репозиториями в проекте при

Международный научный журнал «Синергия наук»


распределенном подходе. И потому мы оцениваем системы с этим типом
более высоким баллом.
В функциональных возможностях мы оцениваем поддержку
возможностей [8]:

ㅡ копирования файлов и папок;

ㅡ переноса файлов и папок;

ㅡ отслеживания изменений в файле построчно.

Максимальный балл ㅡ 3. CVS позволяет только отслеживать

изменения в файле и, соответственно, получает 1 балл. SVN также построчно


отслеживает изменения, а ещё позволяет переносить файлы и папки. Git и
Mercurial поддерживают все три возможности.
Документацию мы оценивали с точки зрения новичка, то есть человека,
у которого никогда не было опыта работы с данной системой. Чем очевиднее
способ получения доступа к документации, чем более понятным языком она
написана, тем больше баллов получает система. Наиболее удобными
оказались Git и Mercurial. На их официальных сайтах прямо на главных
страницах есть ссылки на документации. Сами документации написаны
чётко и ясно. Что касается CVS и SVN, то их документации ориентированы
на специалистов. Человеку без опыта в них трудно разобраться.
Кроссплатформенность является характерной чертой для всех систем,
поэтому все получают максимальный балл.
Цена. Все системы бесплатные и получают по одному баллу.
В итоге Git набирает наибольшее количество баллов. Мы рекомендуем
использовать эту систему контроля версий. Но если у вас есть веская
причина использовать централизованную систему, то мы советуем вам
выбрать SVN.

Международный научный журнал «Синергия наук»


Литература:

1. Concurrent Versions System. ㅡ [Электронный ресурс] ㅡ Режим

доступа. ㅡ URL: http://savannah.nongnu.org/projects/cvs (дата обращения


12.12. 2017)
2. Apache Subversion ㅡ [Электронный ресурс] ㅡ Режим доступа. ㅡ
URL: https://subversion.apache.org/ (дата обращения 12.12. 2017)
3. Git ㅡ Documentation. ㅡ [Электронный ресурс] ㅡ Режим

доступа. ㅡ URL: https://git-scm.com/doc (дата обращения 12.12. 2017)

4. Mercurial ㅡ [Электронный ресурс] ㅡ Режим доступа. ㅡ URL:


https://www.mercurial-scm.org/ (дата обращения 12.12. 2017)
5. Google Trends ㅡ [Электронный ресурс] ㅡ Режим доступа. ㅡ
URL:
https://trends.google.com/trends/explore?date=all&q=%2Fm%2F05vqwg,%2Fm%
2F012ct9,%2Fm%2F08441_,%2Fm%2F08w6d6,%2Fm%2F09d6g&hl=en-
US&tz=&tz= (дата обращения 25.12.2017)
6. Stack Overflow Survey 2017 ㅡ [Электронный ресурс] ㅡ Режим

доступа. ㅡ URL: https://insights.stackoverflow.com/survey/2017 (дата


обращения 20.12.2017)
7. Computer Science Center ㅡ [Электронный ресурс] ㅡ Режим

доступа. ㅡ URL:
https://compscicenter.ru/media/slides/techseminar2014_2014_spring/2014_03_12_
techseminar2014_2014_spring.pdf (дата обращения 18.12. 2017)
8. Wikipedia ㅡ Comparison of version control software ㅡ

[Электронный ресурс] ㅡ Режим доступа. ㅡ URL:


https://en.wikipedia.org/wiki/Comparison_of_version_control_software (дата
обращения 12.12. 2017)
9. Antamoshkin O., Kukarcev V., Pupkov A., Tsarev R. Intellectual
support system of administrative decisions in the big distributed geoinformation
systems //International Multidisciplinary Scientific GeoConference Surveying
Geology and Mining Ecology Management, SGEM 14. – 2014. – С. 227-232.

Международный научный журнал «Синергия наук»


10. Kukartsev V.V. Process programm realization of the capital
reproduction funds //Вестник Сибирского государственного аэрокосмического
университета им. академика М.Ф. Решетнева. – 2009. –№ 5 (26). – С. 129-132.
11. Ефимов С. Н., Тынченко В. В., Тынченко В. С. Проектирование
вычислительной сети эффективной архитектуры для распределенного
решения сложных задач //Вестник Сибирского государственного
аэрокосмического университета им. академика МФ Решетнева. – 2007. – №.
3.
12. Тынченко В. С., Тынченко В. В. Особенности применения GRID-
технологии для распределенного решения крупномасштабных задач
//Актуальные проблемы экономики, информатики и права. – 2008. – С. 132.
13. Шеенок Д.А., Кукарцев В.В. Прогнозирование стоимости
разработки систем с программной избыточностью //Известия Волгоградского
государственного технического университета. – 2013. – Т. 17. – № 14 (117). –
С. 101-105.

Международный научный журнал «Синергия наук»

Вам также может понравиться