DVCS

Материал из CustisWiki

Перейти к: навигация, поиск

DVCS — распределённые системы контроля версий (Distributed/Decentralized Version Control System). Вместо «распределённых» можно также использовать термин «децентрализованные», а вместо «системы контроля версий» — «системы управления версиями» (СУВ).

Отличительные особенности

Основная идея — вместо необходимости наличия центрального репозитория, хранящего историю изменений (как, например, в CVS и Subversion), копия репозитория содержится в каждой рабочей копии, и поэтому разработчики могут обмениваться изменениями напрямую.

В связи с этим сразу возникает необходимость удобной поддержки слияний, так как потенциально возникает сильное ветвление, и с ним нужно что-то делать. Это удобство успешно предоставляется существующими системами, в отличие от, например, Subversion'а (являющегося централизованной СУВ), в которой ветвиться достаточно просто и удобно, а вот сливать изменения — тяжело.

Первое отличие, замечаемое при переходе на DVCS с централизованных систем — команды «update» и «commit» извлекают/фиксируют изменения не из центрального репозитория, а из локального, и появляется ещё две команды — «pull» и «push», предназначенные для приёма/передачи изменений из удалённых репозиториев.

Ещё одно важное отличие — DVCS понимают репозиторий как «цельный проект», и при управлении версиями не делят его на отдельные файлы и каталоги — то есть, если кто-то сделал изменение в другом файле параллельно с вами — ваша правка всё равно создаст отдельную ветку, и их придётся объединять. Хотя объединение, конечно, пройдёт полностью автоматически и безболезненно. Поэтому обычно не рекомендуется поддерживать несколько проектов в одном DVCS-репозитории.

По сути, никто не мешает использовать DVCS в «централизованном стиле», имея сервер и постоянно синхронизируя локальный репозиторий с ним, но при этом всё равно возможен и прямой обмен историей между разными разработчиками.

Интересный факт: все три наиболее популярные DVCS (Git, Mercurial и Bazaar) поддерживают работу с Subversion-репозиториями, причём делают это быстрее, чем сам клиент Subversion, и быстрее всех работает Bazaar.

Известные DVCS

Ниже перечислены наиболее известные на данный момент свободные DVCS.

Самые популярные и активно развиваемые сейчас — в первую очередь, Git, Mercurial и Bazaar, их активно догоняющий.

GNU Arch не развивается, хотя поддерживается.

Git

  • Домашняя страница: http://git-scm.com/.
  • Автор: Linus Torvalds.
  • Создана в 2005-ом году.
  • «Snapshot-based», то есть, хранит полные версии, а не изменения между ними.
  • Консольная команда «git».

Интересные факты:

  • С 2005-го же года используется в разработке ядра Linux.
  • Представляет собой набор утилит, написанных на C, Perl'е, и шелл-скриптов (bash), использует Linux-специфичные вещи в целях оптимизации. В связи со всем этим под Windows чувствует себя хуже Mercurial’а и Bazaar’а.
  • Наиболее быстрая и эффективная в терминах использования дискового пространства.

Mercurial

  • Домашняя страница: http://mercurial.selenic.com/
  • Первый автор: Matt Mackall.
  • Создана в 2005-ом году (первый релиз 19.04.2005).
  • Написана на языке Python.
  • «Changeset-based», то есть, хранит патчи (изменения между версиями).
  • Консольная команда «hg».

Интересные факты:

  • Наиболее совместима с Subversion по синтаксису команд, также (субъективное мнение) имеет наиболее дружелюбный интерфейс.
  • Примерно эквивалентна по доступной функциональности Git’у, но гораздо дружелюбнее и проще последнего.
  • Менее эффективна в терминах использования дискового пространства, чем Git и Bazaar.

Bazaar

  • Домашняя страница: http://bazaar.canonical.com/
  • Первый автор: Martin Pool.
  • Создана в 2007-ом году (первый релиз 14.12.2007).
  • Написана на языке Python.
  • «Snapshot-based», то есть, как и Git, хранит полные версии.
  • Консольная команда «bzr».

Интересные факты:

  • Спонсируется компанией Canonical (занимаются Ubuntu).
  • Точное название Bazaar-NG (Next Generation), предыдущий Bazaar был форком GNU Arch, а ныне называется Baz. Поэтому Bazaar-NG также имеет унаследованные от Arch черты, например, а) у них всегда один «head» (ревизия, не имеющая наследников) и б) в одном репозитории всегда одна ветка, и хотя в новых версиях Bazaar есть возможность создать «shared repository» для хранения в нём множества веток, по удобству это больше похоже на Subversion, чем на Git или Mercurial.
  • Умеет делать checkout’ы (то есть рабочие копии без репозитория), а не только клоны, включающие в себя всю историю.

Darcs

  • Домашняя страница: http://darcs.net/
  • Первый автор: David Roundy.
  • Создана в 2002-ом году, первый публичный релиз в 2003-ем.
  • «Changeset-based», хранит патчи.
  • Консольная команда «darcs».

Интересные факты:

  • Написана на функциональном языке Haskell.
  • Основана на математической «теории патчей», созданной автором.

Monotone

  • Домашняя страница: http://monotone.ca
  • Создана в 2003-ем году.
  • «Changeset-based», хранит патчи.
  • Консольная команда «mtn».

Интересные факты:

  • Модель хранения называется «гибридной», хотя на самом деле хранятся изменения, а полные ревизии, хотя и тоже хранятся, строятся из них.
  • Репозиторий представляет собой один цельный файл.
  • Разработка фокусируется в первую очередь на целостности данных, а не на скорости. В Monotone активно используется криптография для идентификации пользователей и ревизий.

GNU Arch

  • Домашняя страница: http://www.gnu.org/software/gnu-arch/
  • Первый автор: Tom Lord.
  • Смесь C и шелл-скриптов.
  • Создана в 2001-ом году.
  • «Changeset-based», хранит патчи.

Интересные факты:

  • Консольная команда «tla» (Tom Lord’s Arch).
  • От Archа унаследован Bazaar вместе с несколькими своими идеями, активно защищаемыми его сторонниками.

Ссылки



Внимание! Эта статья была создана путем автоматического реплицирования из внутренней базы знаний компании Заказные Информ Системы. Любые правки этой статьи могут быть перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion».