# Распределённая система контроля версий _Основы Git · GitLab Knowledge Base_ **TL;DR:** VCS, где у каждого разработчика - полная копия истории, а не только снимок. Git, Mercurial, Bazaar. Главное отличие от централизованных (SVN, CVS) - отсутствие единой точки отказа и работа без сети. Распределённая система контроля версий (Distributed VCS, DVCS) - это тип VCS, в котором каждый клон репозитория содержит **полную историю** проекта. Не «снимок текущей версии», как у централизованных систем (см. [vcs](/courses/git/kb/vcs.md)), а буквально все коммиты от первого до последнего. Главные представители - Git, Mercurial, Bazaar. Реже встречаются - Darcs, Pijul, Fossil. ## Что меняется по сравнению с централизованной ### Сервер технически не нужен Маша и Петя могут синхронизироваться напрямую: «забери у меня изменения». На практике сервер всё равно появляется - он удобен как точка встречи (GitHub, GitLab) и как резервная копия. Но он не главный. Он один из равноправных клонов. ### Работа без сети Коммиты, ветки, история, поиск - всё локально, мгновенно. Сеть нужна только чтобы синхронизироваться с другими через `push` и `pull`. ### Скорость Локальная операция - это чтение с диска. SVN-клиенту нужно сходить на сервер, дождаться ответа. Git-клиенту - нет. ### Дешёвые ветки Создание ветки - это запись 40 символов в файл (см. [branch](/courses/git/kb/branch.md)). В SVN ветка - копия директории на сервере. Это меняет подход к работе: в Git ветки делают для каждой задачи, в SVN ветки боялись делать. ### Надёжность История продублирована у каждого разработчика. Чтобы потерять её, нужно одновременно сломать все клоны. Сравни с централизованной: один сервер падает без бэкапа - всё пропало. ## Цена - **Дисковое место.** Каждый клон содержит полную историю. Для репозиториев на гигабайты это заметно. Mitigations: `git clone --depth=1` (shallow), `git lfs` для бинарных файлов. - **Чуть сложнее ментальная модель.** Нужно понимать, что мой коммит и коммит на сервере - это разные коммиты, пока я не сделал `push`. ## История BitKeeper - первая широкоизвестная DVCS, 1998. Линус Торвальдс использовал её для ядра Linux с 2002 по 2005. После отзыва бесплатной лицензии в 2005 году Линус написал Git за 10 дней. Параллельно в 2005 году появились Mercurial и Bazaar - обе распределённые, обе с похожими идеями. Технически они были не хуже Git. Победил Git благодаря двум вещам: ядро Linux переехало на него сразу, и в 2008 году появился GitHub. ## Сравнение | | Централизованная (SVN) | Распределённая (Git) | |---|---|---| | История на клиенте | только текущая версия | полная | | Сеть для коммитов | обязательна | не нужна | | Ветки | дорогие (копия директории) | бесплатные (40 байт) | | Точка отказа | сервер | нет | | Размер клиентского хранилища | маленький | пропорционально истории | ## См. также - [Система контроля версий](/courses/git/kb/vcs.md) - [Снимки против дельт](/courses/git/kb/snapshot-vs-delta.md) - [Ветка (branch)](/courses/git/kb/branch.md) - [Working tree](/courses/git/kb/working-tree.md)