Система управления версиями
Определение
Программное обеспечение для управления версиями (VCS) — это полезный инструмент, способствующий совместной работе команды разработчиков. Оно особенно важно для команд с несколькими разработчиками. Каждая компания выбирает VCS, которое лучше всего соответствует её стратегии.
Ниже приведён список наиболее распространённых инструментов VCS.
Git
Git — одно из самых популярных программных обеспечений для управления версиями на современном рынке. Git — это быстрая и эффективная распределённая система управления версиями, которую легко освоить. Она может обрабатывать проекты любого масштаба, от небольших до огромных. К отличительным особенностям Git относятся: дешёвое локальное ветвление, удобные области индексации (staging areas) и поддержка множества рабочих процессов. Это бесплатное программное обеспечение с открытым исходным кодом.

Недостатки Git
Несмотря на свои преимущества, у Git есть и недостатки. Прежде всего, поддержка больших бинарных файлов слабая. Производительность может снижаться из-за больших репозиториев с обширной историей. Кроме того, поведение команд может быть непредсказуемым.
CVS
CVS (Concurrent Versions System) исторически был популярен, но сейчас во многом устарел, уступив место современным распределённым системам. Он помогал разработчикам фиксировать историю файлов и документов. По умолчанию он обрабатывает проекты от небольших до средних, а для поддержки более крупных проектов его необходимо настраивать и расширять. CVS можно использовать практически на любой аппаратной платформе и операционной системе. Это бесплатное программное обеспечение с открытым исходным кодом.

Недостатки CVS
У CVS тоже есть недостатки. В частности, он не проверяет целостность репозитория исходного кода. Отсутствует поддержка атомарных коммитов и чекаутов, а также отслеживания слияний и подписанных ревизий.
SVN
SVN (Apache Subversion) — это централизованная система управления версиями, которая широко использовалась в последние десятилетия. SVN обладает следующими особенностями: версионирование директорий, поддержка атомарных коммитов, отслеживание слияний, возможность копирования, удаления, перемещения и переименования версий, клиент-серверная модель репозитория, метаданные версий произвольной формы, полная поддержка MIME, блокировка файлов и т.д. Это бесплатное программное обеспечение с открытым исходным кодом.

Недостатки SVN
Не хранится время модификации файлов, наблюдаются некоторые проблемы с нормализацией имён файлов и отсутствие поддержки подписанных ревизий.
Mercurial
Mercurial — это распределённая система управления версиями, написанная на Python. Это быстрое программное обеспечение поддерживает проекты любого размера и типа. Его интерфейс довольно предсказуем, что облегчает изучение. Оно поддерживает следующие операционные системы: Unix-подобные, Windows и macOS. Оно отлично работает с бинарными файлами и обладает превосходными возможностями слияния и ветвления. Это бесплатное программное обеспечение с открытым исходным кодом.

Недостатки Mercurial
Для всех дополнений требуется Python. Оно не поддерживает частичные чекауты и некорректно работает с дополнительными расширениями.
Monotone
Monotone — это распределённая система управления версиями, написанная на C++. Это транзакционная VCS, обеспечивающая полностью автономную работу. Слияние учитывает историю, ветки довольно лёгкие.
Monotone поддерживает эффективную синхронизацию по протоколу peer-to-peer. Он понимает слияние с учётом истории, требует минимального обслуживания, ценит целостность проверки кода и поддерживает трёхсторонние слияния. Он работает на нескольких платформах: Linux, Solaris, Mac OS X, Windows и других Unix-системах. Это бесплатное программное обеспечение с открытым исходным кодом.

Недостатки Monotone
Пользователи не могут делать checkout или commit из-за прокси из-за отсутствия протокола HTTP. Для некоторых операций наблюдаются проблемы с производительностью. Наиболее очевидной из них является начальная загрузка (pull).
Примечание: Monotone в значительной степени заброшен и имеет ограниченную актуальность в современных условиях.
Практика
Какая из перечисленных функций не является особенностью Git как системы управления версиями?