open atlas
↑ К треку
Git: от нуля до сеньора GIT · 01 · 01

Зачем нужен контроль версий?

Система контроля версий записывает полную историю проекта — что изменилось, когда, кем и почему — чтобы можно было откатиться к любому прошлому состоянию. Копирование папок руками теряет авторство, параллельную работу и восстановление; контроль версий чинит всё три.

GIT Основы ◷ 14 min
Уровень
ОсновыJuniorMiddleSenior

Ты заканчиваешь фичу и называешь папку project-final. Потом чинишь баг: project-final2. Клиент просит вернуть старую версию, но ты её уже перезаписал. Коллега присылает свою копию по почте — и теперь есть две папки project-final2, которые не совпадают, и никто не скажет, какая строка кода новее и кто её написал. Это пережил каждый разработчик. Инструмент, который кладёт этому конец, — контроль версий, а индустриальный стандарт — git.

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

Цель

После этого урока ты сможешь объяснить, что такое система контроля версий (VCS), назвать четыре вещи, которые она записывает о каждом изменении — что, когда, кто, почему — и описать три конкретные проблемы, которые она решает и которые ручное копирование папок решить не может.

1

Система контроля версий записывает историю проекта, а не только его текущее состояние. Когда ты копируешь папку, ты сохраняешь один снимок и теряешь всё, что было до него. VCS вместо этого хранит каждое состояние, в котором когда-либо был проект, как цепочку записанных изменений. В любой момент ты можешь спросить: как выглядел этот файл в прошлый вторник? Кто изменил эту строку? Каким был проект в момент выпуска версии 1.0? Текущие файлы на диске — это просто последняя точка длинной, проходимой временно́й линии.

2

Каждое записанное изменение называется коммитом и хранит четыре вещи. Коммит — это сохранённый снимок всего проекта плюс метаданные:

  • Что изменилось — точное содержимое каждого файла на этот момент.
  • Когда — отметка времени.
  • Кто — имя и email автора.
  • Почему — короткое сообщение, которое ты пишешь, описывая изменение («Исправить цикл редиректа при логине»).

«Почему» — это часть, которую новички пропускают, а сеньоры берегут. Полгода спустя сообщение часто оказывается единственным, что объясняет странную на вид строку кода.

3

Полная история живёт в репозитории. Репозиторий (или «репо») — это папка проекта плюс скрытое хранилище всей его истории. В git это хранилище — единственный каталог с именем .git в корне проекта. Удали .git — и у тебя останутся обычные файлы без памяти; сохрани его — и ты сможешь переместиться к любому прошлому коммиту, сравнить любые две точки или отменить пошедшую не так работу. Репозиторий — это то, что превращает кучу файлов в проект с прошлым.

Почему это работает

Почему победил git? Ранние системы (CVS, Subversion) хранили историю на одном центральном сервере — если он лежал, ты не мог коммитить, и каждой операции нужна была сеть. Git распределённый: каждый клон — это полная копия всей истории. Ты можешь коммитить, ветвиться и смотреть историю офлайн, в самолёте, вообще без сервера. Эта скорость и независимость — причина, по которой git стал стандартом почти для всего софта за последние пятнадцать лет.

4

Ручное копирование проваливается в трёх вещах, которые VCS делает бесплатно. Конкретно:

  1. Параллельная работа. Двое, правящие app.js как отдельные копии папки, не смогут соединить свою работу, не сравнивая её построчно вручную. VCS сливает их изменения.
  2. Авторство и причина. Папка с именем final3 не записывает ничего о том, кто что изменил и зачем. Коммит записывает всё это.
  3. Восстановление. Перезапиши папку — и старая версия исчезла. В VCS каждое закоммиченное состояние восстановимо: можно откатить один файл или весь проект к любому прошлому коммиту.

Эти три — слияние, атрибуция, восстановление — и есть вся причина существования контроля версий.

Разбор примера

Две версии одной и той же недели.

Без контроля версий. В понедельник у тебя есть site/. Ты добавляешь форму обратной связи и копируешь в site-form/. В среду коллега присылает site-theirs/ с новой шапкой. В пятницу клиент говорит, что старый футер был лучше. Теперь у тебя три папки, нет записи, где какой футер, и нет автоматического способа объединить форму, шапку и старый футер. Ты сливаешь руками, на глаз сравнивая различия, и, скорее всего, заносишь баг.

С контролем версий. Проект — это один репозиторий. Каждое изменение — коммит: «Добавить форму обратной связи» (ты, понедельник), «Переделать шапку» (коллега, среда). В пятницу ты просишь git показать футер из прошлонедельного коммита и восстановить только этот файл — одна команда, без угадывания. Форма, шапка и восстановленный футер сосуществуют, потому что git слил отдельные линии работы. Та же неделя, но у каждого вопроса «что/когда/кто/почему» есть точный ответ.

Частая ошибка

Распространённое убеждение новичка: контроль версий «только для больших команд». Всё наоборот: даже сольный проект выигрывает сразу, потому что твой худший напарник — это ты сам три месяца назад, который не оставил заметок. История коммитов — это и есть та заметка. Создание репозитория стоит одной команды и нуля накладных расходов, так что правильное время начать — на первом файле проекта, а не после первой катастрофы.

Проверь себя
Викторина

Какую возможность даёт система контроля версий, которой НЕТ при копировании папки проекта вручную?

Итог

Система контроля версий записывает всю историю проекта как цепочку коммитов, каждый из которых хранит что изменилось, когда, кто это сделал и почему. Эта история живёт в репозитории — твои файлы плюс скрытое хранилище .git. По сравнению с ручным копированием папок контроль версий добавляет три вещи, которые иначе не получить: слияние параллельной работы, атрибуцию каждого изменения и восстановление любого прошлого состояния. Git — это распределённая VCS, на которой остановилась индустрия, потому что каждая копия держит полную историю и работает офлайн. Дальше ты увидишь неожиданный способ, которым git хранит эти коммиты, — как снимки, а не как различия.

Практика

Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 4 завершено

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.