DVCS
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 вместе с несколькими своими идеями, активно защищаемыми его сторонниками.
Ссылки
- wikipedia:Distributed revision control
- wikipedia:Comparison of revision control software
- DVCS vs SVN
- Ещё одно сравнение популярных DVCS
Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion».
Репликация: База Знаний «Заказных Информ Систем» → «DVCS»