Learning Platform
Глоссарий Troubleshooting
Урок 02.01 · 12 мин
Начальный
GitКонтроль версийМотивацияС нуля

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

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


Боль первая: «я перезаписал нужную версию»

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

Знакомо? Это происходит постоянно: со студентами, дипломниками, аналитиками, инженерами. Файл — это всегда только его последнее состояние. Прошлого у файла нет, если вы сами его не сохранили.

Интуитивное решение приходит само собой: делать копии. И тут начинается боль вторая.


Боль вторая: папка «финальная_версия_2_финал»

Чтобы не потерять рабочий вариант, вы начинаете копировать файл перед каждым крупным изменением. Через неделю в папке лежит вот это:

ls -1
otchet.docx
otchet_pravki.docx
otchet_final.docx
otchet_final_2.docx
otchet_final_2_FINAL.docx
otchet_final_pravki_ot_borisa.docx
otchet_final_ispravleno_ne_trogat.docx

Вопросы, на которые теперь нет ответа:

  • Какой файл свежее: final_2 или final_pravki_ot_borisa?
  • Что именно изменилось между final и final_2? Один абзац или половина текста?
  • Почему вообще появился final_2? Что я в нём правил?
  • Можно ли удалить pravki, или там что-то важное, чего нет в остальных?

Имя файла пытается хранить две вещи сразу: какая это версия и что в ней нового. Но имя — это просто строка. Оно не помнит дату, не помнит причину изменения, не умеет показать разницу между двумя копиями. Чем больше копий, тем хуже: вы тратите время не на работу, а на археологию собственной папки.

note Та же беда поджидает в коде. Скрипт load_data.py, потом load_data_v2.py, потом load_data_v2_rabochiy.py, потом load_data_NE_UDALYAT.py. Через месяц никто, включая автора, не помнит, какой из них запускать в продакшене.


Боль третья: «а что вообще изменилось?»

Допустим, копии вы аккуратно подписали датами: otchet_2026-05-20.docx, otchet_2026-05-27.docx. Уже лучше — хотя бы видно, что свежее. Но остаётся главный вопрос: что именно изменилось между двумя датами?

Чтобы это узнать, придётся открыть оба файла рядом и глазами искать различия. На двух страницах — терпимо. На тридцати — невозможно. А ведь часто нужно ровно одно: понять, какие три строки я поменял вчера, чтобы откатить именно их, не трогая остального.


Боль четвёртая: работа вдвоём

Теперь добавьте коллегу. Вы оба правите один отчёт. Вы отправляете ему файл по почте, он вносит правки, присылает обратно. Параллельно вы тоже что-то меняли в своей копии. Теперь у вас две разошедшиеся версии, и нужно вручную перенести его правки к себе или наоборот. Кто-то обязательно сотрёт чужую работу. Это та же боль перезаписи, только теперь страдает не только ваше время, но и отношения в команде.


Что такое контроль версий

Контроль версий (version control) — это инструмент, который берёт на себя всю эту возню. Идея простая: вы продолжаете работать с одним файлом, а инструмент сам запоминает каждое его состояние, которое вы попросили сохранить.

Вот что вы получаете взамен папки с копиями:

  • Одна папка, один файл. Никаких _final_2_FINAL. Версии хранятся не как отдельные файлы, а как точки во времени внутри инструмента.
  • Каждая сохранённая версия подписана. Не «final_2», а «исправил опечатки в выводах» — короткое сообщение от вас, зачем эта версия появилась. Плюс автоматически: дата, время, автор.
  • Возврат к любой прошлой версии за секунду. Захотели вчерашний вариант — взяли вчерашний. Прошлое никуда не девается.
  • Разница видна автоматически. Инструмент сам покажет, какие строки добавлены, какие удалены между двумя версиями. Глазами искать не надо.
  • Двое могут работать вместе. Инструмент умеет аккуратно объединять правки двух людей и предупреждает, если они тронули одно и то же место.

То, что вы сейчас прочитали, и есть весь смысл Git. Git — это конкретная программа для контроля версий, самая популярная в мире. Слово «коммит» (commit), которое вы наверняка слышали, — это и есть одна сохранённая, подписанная версия. Вместо otchet_final_2.docx вы делаете коммит с сообщением «добавил раздел про выручку» — и эта версия навсегда остаётся в истории, помеченная датой и автором.

tip Запомните ощущение: контроль версий — это «бесконечная кнопка отмены», которая переживает закрытие редактора, перезагрузку компьютера и даже передачу проекта другому человеку. Всё, что вы коммитите, можно вернуть.


Попробуй сам

Установка Git и первый коммит — в следующих уроках. А пока сделайте упражнение без всякого Git, чтобы почувствовать проблему руками. Откройте терминал и создайте «ручную» историю версий по-старому:

mkdir -p ~/git-sandbox/lesson-01-pain
cd ~/git-sandbox/lesson-01-pain

echo "Отчёт. Выручка выросла." > otchet.txt
cp otchet.txt otchet_final.txt
echo "Отчёт. Выручка выросла на 12%." > otchet_final.txt
cp otchet_final.txt otchet_final_2.txt
ls -1

Ожидаемый вывод:

otchet.txt
otchet_final.txt
otchet_final_2.txt

А теперь честно ответьте себе на два вопроса, глядя только на имена файлов:

  1. Чем otchet_final_2.txt отличается от otchet_final.txt?
  2. Какой из трёх файлов нужно отправить заказчику?

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


Проверка знанийKnowledge check
Почему хранение версий через копии файлов с именами вроде otchet_final_2_FINAL.docx плохо масштабируется? Назовите хотя бы три проблемы.
ОтветAnswer
Во-первых, по имени файла нельзя понять, что именно изменилось между копиями — имя это просто строка, оно не хранит разницу. Во-вторых, теряется причина изменения: непонятно, зачем появилась версия final_2 и можно ли удалить старые. В-третьих, неочевидно, какая версия свежее (final_2 или final_pravki). В-четвёртых, копии засоряют папку и заставляют тратить время на разбор вместо работы. В-пятых, при работе вдвоём копии расходятся и кто-то затирает чужие правки. Контроль версий решает всё это: один файл, подписанные датой/автором/сообщением версии, автоматический показ разницы и аккуратное слияние правок.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 3. Почему хранение версий через копии файлов с именами вроде otchet_final_2_FINAL.docx плохо работает?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 3