Персональные инструменты
 

DVCS

Материал из CustisWiki

Версия от 16:04, 2 марта 2011; VitaliyFilippov (обсуждение | вклад) (Mercurial)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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 вместе с несколькими своими идеями, активно защищаемыми его сторонниками.

Ссылки


Репликация: База Знаний «Заказных Информ Систем» → «DVCS»

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