1. Как профессионалы хранят историю: знакомься, git
— Слушай, а раз уж я теперь почти в деле, — Тёма сам выходит на следующий вопрос, и в голосе уже та небрежность, будто он спрашивает не про себя, а так, из любопытства, — как тогда настоящие разработчики живут? У них же в проектах тысячи файлов, и народу куча, все правят одно и то же. Если бы они плодили папки, как… ну, как некоторые, — они бы друг друга поубивали за день.
— Поубивали бы, — соглашается Лёха. — Поэтому они так и не делают. У них есть нормальная штука. И у неё есть имя — git.
Лёха не торопится с деталями, а сначала дает общую картину:
— Профи не держат склад копий. Они держат одну ленту истории, в которой все состояния проекта записаны по очереди, аккуратно, друг за другом. Не куча папок в углу, а упорядоченная история. Это и есть git.
— Подожди, — Тёма пытается уложить. — «Одна лента» — это как? У меня вот десять папок было. А у них что, одна папка, но внутри неё как-то спрятаны все версии?
— Почти. Только не «спрятаны как-то», а аккуратно записаны, с порядком и подписями: вот это состояние было таким-то, потом таким-то. Сейчас покажу на штуке, которую ты сто раз видел.
2. История версий в Google Docs: три способности git
— А как это вообще выглядит? — Тёма недоверчив. — Лента — это что, тоже папки, только в ряд?
— Не папки. Самый понятный образ — история изменений в Google Docs, — Лёха цепляется за то, что Тёма точно видел. — Ты же работал в гугл-доке? Документ один. Ты его правишь. Но в любой момент открываешь «историю изменений» и видишь: вот таким он был утром, вот таким — час назад, вот что и кто поменял между этими точками. И можешь откатиться к любому прошлому состоянию. Заметь — документ при этом не раздваивается на договор_финал2. Он один. А вся история аккуратно лежит рядом с ним.
Тёма прокручивает в голове — и правда, он же так делал. Писал когда-то общий документ, кто-то всё поудалял, а он зашёл в историю, нашёл нужную точку и вернул как было. Никаких копий документ_2, документ_норм — один файл, и вся его жизнь записана сбоку.
— А, так я этим уже пользовался, только в доках, — говорит он. — И ни разу не подумал, что код можно так же.
— Ага, оно самое. Штука та же, просто для кода у неё своё имя. git делает ровно то же для кода, — продолжает Лёха, и проговаривает три вещи. — Первое: хранит ленту состояний проекта — не кучу копий, а упорядоченную историю. Второе: позволяет вернуться к любому сохранённому состоянию. Третье: показывает, что именно менялось между состояниями — то самое, чего твои папки тебе никогда не показывали.
Тёма ловит мысль на лету и расплывается:
— О, так это же мои final2, только причёсанные. Выходит, я сам додумался до того, до чего серьёзные дядьки шли годами, — просто я свою версию руками лепил, а у них она с именем и в галстуке. Суть-то одна — не потерять удачное. Способ только в сто раз чище: одна история вместо склада копий.
— Ровно так, — кивает Лёха. — git — это и есть профессиональная система хранения версий. Одна история, и всегда можно отмотать назад, видя, что менялось.
И добивает третьим пунктом, тем, что Тёму особенно цепляет:
— И вот это «видно, что менялось» — оно тебе сегодня прям в больное место. Помнишь, ты не мог понять, чем final отличается от final2? Сидел, гадал? В git ты бы открыл историю и увидел разницу строчка в строчку: вот тут добавили растения, вот тут поправили счёт. Папки тебе этого не показывали никогда — они немые, просто лежат. А история — говорящая.
— Более того. Git настолько удобная штука, что буквально миллионы разработчиков ее используют для совместной работы над публичными проектами, — добавляет Лёха. — Место, куда эти проекты выкладывают, чтоб работать вместе, целой командой, зовётся GitHub. Тоже пока просто слово в копилку — но теперь ты его будешь замечать повсюду, пусть лежит в голове рядом с git.
3. Что использовать вместо git сейчас
Лёха, продолжает, сев на любимую лошадку:
— А внутри git есть такая штука — ветки, это когда основная линия, на которой живёт рабочая игра, так и зовётся — прод. Это версия, которая работает, и её не ломают.
— А теперь представь: хочешь собрать вторую версию Тетриса, космическую, а рабочую трогать страшно. Ты создаёшь ветку — отдельную линию рядом с прод. Дальше все эксперименты идут в ней: прод стоит целый, а ты в своей ветке хоть всё переверни. Зашло — вливаешь обратно, не зашло — выбрасываешь ветку целиком, и…
— Стоп-стоп, погоди, — Тёма выставляет ладонь, как гаишник. — Ветки, коммиты — это вот пускай зануды с механическими клавиатурами по вечерам полируют, у меня от одних слов зубы сводит. Сама идея — история, точки возврата — это прям моё, тут вопросов нет. Но сейчас запахло «настоящей инженерной дисциплиной», я носом чую: сейчас будут полчаса учить раскладывать носки по цвету. Не моё. Мне бы просто хорошую замену моим final2 — кнопку, ткнул и вернулся в прежнее состояние. А весь этот серьёзный инструмент — давай не сегодня. И вообще не при мне.
Лёха смеётся и сразу сдаёт назад:
— Принято. И знаешь, ты даже прав, что тормозишь. git — мощный, но у него свои понятия: ветки, коммиты, целый набор команд. Вывалить это всё на тебя прямо сейчас — самый верный способ всё запутать и отбить охоту. Поэтому сегодня твоя задача простая: запомнить, что есть такая профессиональная система хранения истории, и зовут её git. Имя в голове — этого пока хватит.
— А когда по-настоящему? — аккуратно интересуется Тёма.
— Когда у тебя появится проект, который реально страшно потерять. Сейчас-то ты Тетрисом балуешься — ну сломал, ну собрал заново, не трагедия. А вот когда будет вещь, за которую душа болит, — тогда git и раскроется как серьёзная страховочная сетка. И поверь, ты сам к нему придёшь, без меня: однажды упрёшься в ситуацию, где лёгких инструментов не хватит, и вспомнишь — а, было же то самое профи решение. Вот тогда и сядешь разбираться, уже с понятным «зачем».
— Вот это по-нашему, — Тёма ухмыляется и хлопает по столу. — А то я уж приготовился, что меня сейчас, как первоклашку, посадят зубрить этот ваш git, строчка за строчкой. А оказывается, имя записал, кивнул умно — и свободен. Люблю, когда умные люди сами разрешают не учить лишнего.
— Можно. И это нормально, даже правильно. Имя записал, идею понял — на сегодня хватит.
— И кстати, чтоб ты не пугался заранее, — добавляет Лёха. — Когда день придёт, ставить его руками тебе не придётся. Скажешь агенту «поставь git» — он и поставит, и версию покажет. Как любой другой инструмент.
— В смысле просто словами? — Тёма даже отрывается от экрана.
— А ты уже забыл, с чего мы начинали? Ты ему в первый же день так полверстака и собрал. Инструменты ставит агент, твоё дело — сказать какой. Так что вся страшная профи-система для тебя однажды сведётся к одной строчке в чате.
— А пока для твоих экспериментов хватит инструмента попроще, — добавляет Лёха. — Кнопки отмены прямо внутри ИИ-агента. Лёгкой, быстрой, без всяких веток и коммитов. Вот её сейчас и покажу — и это уже не туманное «потом», это прямо сейчас, сегодня.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ