linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it works
  • Уроки
  • База знаний
  • Собеседование
home/git/kb/Основы Git/distributed-vcs

kb/basics ── Основы Git ── beginner

Распределённая система контроля версий

VCS, где у каждого разработчика - полная копия истории, а не только снимок. Git, Mercurial, Bazaar. Главное отличие от централизованных (SVN, CVS) - отсутствие единой точки отказа и работа без сети.

view as markdownaka: dvcs, distributed-version-control

Распределённая система контроля версий (Distributed VCS, DVCS) - это тип VCS, в котором каждый клон репозитория содержит полную историю проекта. Не «снимок текущей версии», как у централизованных систем (см. vcs), а буквально все коммиты от первого до последнего.

Главные представители - Git, Mercurial, Bazaar. Реже встречаются - Darcs, Pijul, Fossil.

Что меняется по сравнению с централизованной

Сервер технически не нужен

Маша и Петя могут синхронизироваться напрямую: «забери у меня изменения». На практике сервер всё равно появляется - он удобен как точка встречи (GitHub, GitLab) и как резервная копия. Но он не главный. Он один из равноправных клонов.

Работа без сети

Коммиты, ветки, история, поиск - всё локально, мгновенно. Сеть нужна только чтобы синхронизироваться с другими через push и pull.

Скорость

Локальная операция - это чтение с диска. SVN-клиенту нужно сходить на сервер, дождаться ответа. Git-клиенту - нет.

Дешёвые ветки

Создание ветки - это запись 40 символов в файл (см. branch). В 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 байт)
Точка отказасервернет
Размер клиентского хранилищамаленькийпропорционально истории

§ см. также

  • vcsСистема контроля версийИнструмент, который хранит историю изменений файлов, позволяет возвращаться к прошлым версиям и совместно работать над проектом нескольким людям. Три поколения: локальные, централизованные, распределённые.
  • snapshot-vs-deltaСнимки против дельтГлавное идейное отличие Git от SVN/CVS/Perforce. Старые VCS хранят каждую версию как разницу с предыдущей. Git хранит каждую версию как полный снимок проекта, с дедупликацией одинаковых файлов через SHA.
  • branchВетка (branch)Ветка в Git - это файл в `.git/refs/heads/`, в котором лежит SHA одного коммита. Создание, переключение и удаление веток тривиальны, потому что данных в ветке - 41 байт.
  • working-treeWorking treeФайлы и директории твоего проекта на диске - те, которые ты открываешь в редакторе. Одна из трёх зон Git наряду с индексом ([[add]]) и репозиторием ([[commit]]).
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки