1. Перезаход: ветка, режим, узкая задача
До сих пор его почти вели за руку: Олег учил чтению чужого кода, Лёха показывал инструменты. Теперь Тёма собирает правку начисто и сам — с Саней, от чистой ветки до слитого результата. На руках у него всё нужное: scope, три класса изменений, режим под риск. Задача простая: сделать ровно одну дверь и не дать перекрасить квартиру.
Утром он ломанулся бы в файл сходу. Сейчас — тормозит.
— Так, не гони, — говорит он себе под нос. — Как Олег учил: медленно и по порядку.
Первым делом — ветка. Чужой код на main он давно не трогает, это уже рефлекс.
— Сперва подстелить соломки, — бормочет он и пишет Сане словами:
Заведи ветку под правку partner-зоны и переключись на неё.
Саня заводит fix/partner-link — main нетронут, есть куда откатиться, если пойдёт криво. Тёма для верности переспрашивает:
на какой я сейчас ветке?
— fix/partner-link, не main, — докладывает Саня.
— Вот и хорошо. — Тёма выдыхает. — Теперь руль доверия. Тут чужое, вслепую не верю.
Жмёт Shift+Tab, пока режим не встанет в manual:
Shift+Tab → manual # на чужом коде НЕ acceptEdits: хочу видеть КАЖДОЕ изменение
В статусе сессии — ⏸ manual mode on, не acceptEdits. Теперь ни одна правка не уедет в файл, пока Тёма сам её не глянет.
— И только теперь — сама задача, — говорит он. — Не как утром. С границей.
Пишет узко, с запретным блоком:
В partner-зоне поправь ссылку у спонсорского блока на новый адрес. Больше ничего не трогай.
Отправляет.
2. Разбираем дифф по ящикам
Саня делает нужную правку — и, как Тёма уже знает, тащит за собой хвост. Сообщает, что готов применить, и ждёт: режим manual сработал, в файл ещё ничего не уехало. Тёма открывает /diff — и видит разом всё: настоящее целевое изменение, чужое форматирование подрядчика, пара мелких beautify-штрихов и движение в соседней зоне, куда задача вообще не просила заходить.
/diff # смотрим весь заход: сколько тут от задачи, сколько «заодно»
Раньше Тёма бы пролистнул это и кивнул. Сейчас наклоняется к экрану и идёт по диффу медленно, подозрительно, не скользя. Впервые в жизни он на диффе не пассажир, а вахтёр — и вслух разносит каждый кусок по ящикам.
— Так. Вот целевое — дверь, которую просили покрасить. Это беру. — Палец ползёт ниже. — А это что? Форматирование причесал, отступы переставил… я про это не просил. Лишнее. — Ещё ниже, и он хмурится. — Тут вообще в соседнюю зону залез, а я даже не знаю, что там держится. Опасное, руки прочь. — И замирает на последнем: непрошеная анимация, логотипы мягко всплывают, реально дорого сделано. — Ох, красиво же… старый я такое бы сразу в портфолио. — Палец висит секунду. — Но не заказывал. И не в чужом коде. Неожиданное — мимо.
— Оставить только целевое? — уточняет Саня.
— Не-а. — Тёма мотает головой. — Одна нужная строчка утонула в хвосте, весь заход кривой. diff мне для того, чтоб понять, а не по кусочку выковыривать. Заворачиваю целиком.
Он отклоняет правки — в файл не уходит ничего. И заворачивает Сане заход не просто «переделай», а с границей теснее, чтоб хвоста в принципе не было:
Только ссылку в спонсорском блоке. Форматирование, соседние зоны и анимацию не трогай вообще.
Саня заходит снова — и в этот раз дифф короткий: одна строчка. Та самая дверь. Тёма ещё раз проходит его вахтёром — чисто, хвоста нет — и вот теперь принимает.
— Прикинь, Сань, — говорит он и сам на этом ловится, — первый раз в жизни горжусь не тем, что нагородил. А тем, что не сделал. Раньше кайф был от «ого, сколько я наворотил». А сейчас — от того, что ни одна лишняя фигня мимо меня не пролезла. Тише, а слаще.
3. Один заход — целиком в корзину
В одном из заходов Саня разгоняется так, что дифф снова на пол-экрана. Вылавливать по одному — и лень, и опасно: моргнёшь — пропустишь опасный кусок.
— Кривой дубль, — говорит Тёма без прежней паники. Полкурса назад он бы тут похолодел — «всё, опять сломал». Сейчас просто пожимает плечами и жмёт /rewind. Весь заход целиком — в корзину.
/rewind # снять расползшийся заход целиком, вернуться к состоянию до правки
— Смешно, — говорит он Сане, глядя на чистое окно. — Я ж на эту кнопку в начале курса чуть не молился. Она одна меня и спасала.
— А теперь? — будто подыгрывает Саня.
— А теперь она просто верхняя сетка. Под ней ветка, под веткой ещё что-нибудь. Раньше вся защита висела на одном /rewind, а сейчас их у меня несколько. Заходим заново, поаккуратнее.
4. Закрепляем правила в settings.json
После пары таких заходов Тёма понимает, что управлять все руками каждый раз — морока. Одно и то же: partner-зону под спрос, замороженный кусок — наглухо. Он просит Саню положить это правилом в settings.json, чтоб не решать заново на каждом шаге:
{
"permissions": {
"ask": ["Edit(src/partner/**)"],
"deny": ["Edit(legacy/**)"]
}
}
Читается прямо: правки в папке src/partner/ — спрашивать перед каждой; в legacy/, старом замороженном куске портала, — запрещено наглухо, агент туда даже не сунется.
— А ну проверим, что не для красоты написано, — Тёма нарочно толкает Саню в legacy/. Правило срабатывает, дверь заперта. — О, бьёт точно по адресу. Не «всё или ничего», а именно туда, куда надо.
5. Вошёл, сделал, вышел
День идет к концу, Тёма закрывает работу как положено — фиксирует чистую правку в гите и даже готовит её к слиянию. Саня все сделает сам - нужно просто попросить его словами:
Зафиксируй правку partner-ссылки осмысленным сообщением и подготовь к слиянию в main.
Саня делает коммит с понятным сообщением и готовит ветку к слиянию. Тёма открывает дифф последний раз — проверить. Одна строчка. Та самая дверь. Больше в ветке нет ничего.
Он листает вниз — туда, где утром расползалась косметика. Чужая вёрстка стоит как стояла: те же странные отступы, чужие имена, своя кривая логика. Тот блок, что он так и не понял, цел — именно потому, что Тёма к нему не полез.
— Вошёл, сделал дело, вышел, — говорит он вслух пустой комнате. — И ничего не сломал.
Он ведёт пальцем по экрану, по чужим строчкам, которые так и не тронул.
— Смешно, — говорит он в пустоту. — Месяц назад я бы это и за работу не счёл. Где размах, где вау? Одна строчка, кто её заметит. — Качает головой. — А вот это и есть класс. Что незаметно. Что никто и не догадается, сколько я тут не сломал.
6. Зашёл и не наследил
Олег, который весь день краем глаза наблюдал за этой аккуратностью, подходит к концу — и не ворчит. Смотрит на узкий чистый дифф, на нетронутую соседнюю зону, и говорит просто:
— Вот так с чужим кодом и надо. Зашёл, тронул аккуратно, вышел. Не наследил.
— Дядь Олег, ты ж меня месяц пилил за игрушки, — Тёма отрывается от экрана. — А хвалишь за одну строчку. Раньше меня хвалили, когда много и ярко. А ты — когда мало и незаметно.
— Так это и сложнее, — пожимает плечами Олег. — Наворотить всякий горазд. А зайти в чужое и ничего не сломать — это уметь надо.
Тёма молчит. И это скупое Олегово «сложнее» весит сейчас больше, чем весь офис хвалил за пол-экрана анимаций.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ