git (машина времени для файлов)
На пальцах
Ты с двумя коллегами пишете книгу. Каждый раз, когда кто-то из вас заканчивает кусок, он нажимает «сохранить версию» и пишет одну строку: что поменялось. Через месяц у вас сотня таких сохранений. Захотелось вернуться к версии двухнедельной давности — берёшь и откатываешься. Коллега переписал пятую главу, пока ты работал над седьмой — машина сама понимает, что правки в разных местах, и соединяет их без потерь. Захотелось попробовать другую концовку, не ломая основной текст — делаешь ответвление, экспериментируешь, потом решаешь, оставлять или нет. git — это и есть такая машина времени для файлов на компьютере: хранит каждое сохранение, умеет откатываться, ветвиться и соединять правки нескольких людей.
Здесь сравнение хромает: в обычной машине времени путешествует один человек, а в git «путешественников» может быть сколько угодно, и их маршруты потом встречаются — это называется ветки и слияние.
Что это
Программа, которая хранит полную историю изменений файлов в папке: каждое сохранение (commit) — это зафиксированное состояние всех файлов с короткой запиской автора, что и зачем поменялось. Работает локально, без интернета. Синхронизация между участниками идёт через отдельные сервисы (GitHub, GitLab, Bitbucket), но сам git — это инструмент на твоей машине.
Зачем
Типовой пример — интернет-магазин. Трое разработчиков: Маша пилит каталог, Петя — корзину, Катя — личный кабинет. Без git они бы редактировали одни и те же файлы и затирали работу друг друга. С git каждый работает в своей ветке и потом сливает изменения. Вдруг Петя в четверг сломал корзину — откатываемся к вчерашнему сохранению, пока он чинит. Захотелось дать заказчику посмотреть новую версию каталога до запуска — git развернёт её на отдельном адресе. Через год нужно вспомнить, зачем поменяли форму оплаты — git покажет, кто и когда это сделал.
Ещё git умеет:
- хранить историю локально, без сервера (распределённая система контроля версий)
- делать параллельные версии работы (ветка, branch) и сливать их (merge)
- показывать разницу между любыми двумя версиями файла (diff)
- помечать важные точки (тег, tag) — например, «версия 2.0»
- разрешать конфликты, когда два человека правили одно и то же место
- работать с любыми текстовыми файлами: код, документы, конфиги — не только с программами