30.01.2026

Системы контроля версий

photo_2026-01-28_20-11-33
photo_2026-01-28_20-11-33

Чаще всего на проектах ты столкнёшься с git-подобными системами. Реже, но всё ещё можно встретить и svn. На текущем этапе знать разницу необязательно. В статье для удобства используется git.

Как работает контроль версий?
Классический пример — написание дипломной работы. При добавлении новой главы или исправлении ошибок в предыдущих главах мы обычно сохраняем новую версию диплома под названием что-то вроде «Дипломныйпроект_1.docx», «Дипломныйпроектfinal.docx»,  «Дипломныйпроект_final._final.docx» и т.д.  Чтобы не запутаться с версиями файла, удобнее использовать контроль версий.

В чём разница и зачем оно нам?
Продолжу объяснять на примере дипломной работы.
Репозиторий — это папка, в которой у тебя лежит дипломный проект. Внося изменения, ты не нажимаешь «сохранить как…», а делаешь коммит. К коммиту можно оставить комментарий, например, «Добавил главу 4».

В отличие от диплома, над проектом, как правило, работает сразу несколько человек. Это ещё одна причина, почему без систем контроля версий никуда. Перед началом работы над задачей создаётся ответвление — оно так и называется — ветка. В ней один человек вносит свои изменения, например, добавляет новый код.

Продолжая пример с дипломом, можно создать новую ветку «chapter5», написать в ней главу 5, а потом сделать коммит. На следующий день взглянули на это свежим взглядом, увидели несколько ошибок, исправили их, снова сделали коммит (то есть нажали «сохранить как…»).

После того как всё, что хотели сделать в ветке, сделали, можно влить изменения в основной файл диплома — смержить ветку с основным файлом. Так, как если бы мы удалили файл «диплом_4главы.docx» и оставили только «диплом_5глав.docx». Но с системой контроля версий возможность откатить изменения остаётся!

Таким образом с ветвлением стало возможно работать над одним проектом нескольким людям почти независимо, внося свой код в единый проект. А если затронуть один и тот же участок кода, то произойдёт конфликт, но ничего не «перетрётся».

Про основные команды git можно почитать тут.