W3docs

Программное обеспечение для контроля версий

Полезная информация о программном обеспечении для контроля версий: преимущества и недостатки наиболее распространённых инструментов.

Что такое программное обеспечение для контроля версий?

Программное обеспечение для контроля версий (VCS) — это инструмент, который записывает изменения в наборе файлов с течением времени, позволяя вам вернуться к любой более ранней версии, увидеть, кто и что изменил, а также объединять работу многих людей без взаимной перезаписи. Это основа любого совместного рабочего процесса разработки программного обеспечения, необходимая с того момента, как над кодовой базой начинает работать более одного человека.

На этой странице объясняются два семейства программного обеспечения для контроля версий, рассматриваются наиболее известные инструменты и их компромиссы, а также помогается определить, какой из них подходит для вашего проекта. Если вы хотите сначала разобраться с базовой концепцией, прочитайте Система контроля версий; чтобы понять, почему именно Git стал победителем, смотрите Что такое Git.

Централизованные и распределённые системы

Почти каждая VCS относится к одной из двух архитектур, и это различие определяет всё остальное.

  • Централизованная (CVCS): единственный сервер хранит каноническую историю. Клиенты извлекают рабочую копию и фиксируют изменения прямо на этот сервер. Примеры: CVS, SVN. Преимущество — один очевидный источник истины и простое управление доступом; недостаток — для фиксации изменений нужен доступ к сети, а сервер является единой точкой отказа.
  • Распределённая (DVCS): каждый клон — это полная копия всего репозитория, включая всю историю. Вы фиксируете изменения, создаёте ветки и просматриваете историю локально и в офлайн-режиме, а затем синхронизируетесь с другими по мере готовности. Примеры: Git, Mercurial, Monotone. Это делает большинство операций мгновенными и устраняет единую точку отказа, за счёт чуть более сложной концептуальной модели.

Распределённый дизайн Git — главная причина, по которой создание веток и фиксация изменений ощущаются мгновенными: нет обращения к серверу. Каждый клон, созданный с помощью git clone, уже содержит полную историю проекта.

Широко используемые инструменты

Git

Git — это де-факто стандартная распределённая система контроля версий сегодня. Она быстрая, эффективная и работает с проектами любого размера. Её отличительные сильные стороны — дешёвое локальное ветвление (см. git branch), удобная область подготовки (см. git add) и поддержка множества рабочих процессов. Это бесплатное программное обеспечение с открытым исходным кодом.

Git

Ограничения. Поддержка больших бинарных файлов слабая из коробки — хотя Git LFS решает эту проблему. Операции могут замедляться на очень больших репозиториях с длинной историей, а широта команд может казаться ошеломляющей для новичков.

CVS

CVS (Concurrent Versions System) — это централизованная система, которая была исторически популярна, но сейчас в основном устарела, вытесненная современными распределёнными инструментами. Она записывает историю файлов и документов и работает практически на любых аппаратных платформах и операционных системах. Это бесплатное программное обеспечение с открытым исходным кодом.

CVS

Ограничения. CVS не проверяет целостность репозитория и не поддерживает атомарные коммиты, отслеживание слияний и подписанные ревизии — недостатки, которые непосредственно послужили поводом для создания её преемников.

SVN

SVN (Apache Subversion) — централизованная система контроля версий, широко использовавшаяся в 2000-е годы и до сих пор встречающаяся в некоторых корпоративных и унаследованных средах. Её возможности включают версионирование директорий, атомарные коммиты, отслеживание слияний, первоклассные операции копирования/перемещения/переименования/удаления, клиент-серверную модель, свободную версионированную метаинформацию, полную поддержку MIME и блокировку файлов. Это бесплатное программное обеспечение с открытым исходным кодом.

SVN

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

Mercurial

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

Mercurial

Ограничения. Python требуется для всех дополнений, частичное извлечение не поддерживается, и система не всегда хорошо работает со сторонними расширениями.

Monotone

Monotone — это распределённая система контроля версий, написанная на C++. Это однофайловая транзакционная VCS, предлагающая полностью автономную работу, слияние с учётом истории, лёгкие ветки, низкие накладные расходы на обслуживание и одноранговую синхронизацию. Работает на Linux, Solaris, macOS, Windows и других Unix-системах. Это бесплатное программное обеспечение с открытым исходным кодом.

Monotone

Ограничения. Без поддержки HTTP пользователи не могут извлекать или фиксировать изменения из-за прокси-сервера, а некоторые операции — в особенности начальное извлечение — имеют проблемы с производительностью. Сегодня Monotone в основном заброшена и имеет ограниченную актуальность.

Краткое сравнение

ИнструментАрхитектураСтатусКлючевое преимуществоОсновной недостаток
GitРаспределённаяОтраслевой стандартСкорость, ветвление, экосистемаБольшие бинарные файлы, кривая обучения
MercurialРаспределённаяПоддерживается, нишеваяПредсказуемость, простой интерфейсМеньшая экосистема
SVNЦентрализованнаяУстаревшая / корпоративнаяБлокировка файлов, простая модельТребует сервера для фиксации
CVSЦентрализованнаяУстаревшаяИсторическое значениеНет атомарных коммитов или проверки целостности
MonotoneРаспределённаяВ основном заброшенаНадёжная модель целостностиНет HTTP, медленное начальное извлечение

Какой выбрать?

Для почти каждого нового проекта ответ — Git: у него самое большое сообщество, лучшая поддержка хостинга (GitHub, GitLab, Bitbucket) и богатейший инструментарий. Прибегайте к альтернативе только тогда, когда конкретное ограничение подталкивает вас к этому:

  • Mercurial — если ваша команда предпочитает меньший, более согласованный набор команд и вы не привязаны к экосистеме Git.
  • SVN — если вам нужна строгая блокировка файлов для несливаемых бинарных ресурсов или вы поддерживаете существующий централизованный рабочий процесс.
  • CVS / Monotone — как правило, только при поддержке существующего унаследованного репозитория; избегайте для новой работы.

После того как вы определились с Git, следующий шаг — установить его и узнать, как работает управление исходным кодом на практике.

Практика

Практика
Какая из перечисленных возможностей не является особенностью Git как программного обеспечения для контроля версий?
Какая из перечисленных возможностей не является особенностью Git как программного обеспечения для контроля версий?
Was this page helpful?