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. Увійшов, зробив, вийшов
День іде до кінця, Тьома закриває роботу як належить — фіксує чисту правку в Git і навіть готує її до злиття. Сашко все зробить сам — треба просто попросити його словами:
Зафіксуй правку partner-посилання зрозумілим повідомленням і підготуй до злиття в main.
Сашко робить коміт із зрозумілим повідомленням і готує гілку до злиття. Тьома відкриває диф востаннє — перевірити. Один рядок. Те саме цільове посилання. Більше в гілці немає нічого.
Він гортає вниз — туди, де вранці розповзалася косметика. Чужа верстка стоїть як стояла: ті самі дивні відступи, чужі імена, своя крива логіка. Той блок, який він так і не зрозумів, цілий — саме тому, що Тьома до нього не поліз.
— Увійшов, зробив справу, вийшов, — каже він уголос порожній кімнаті. — І нічого не зламав.
Він веде пальцем по екрані, по чужих рядках, яких так і не торкнувся.
— Смішно, — каже він у порожнечу. — Місяць тому я б це й роботою не вважав. Де розмах, де вау? Один рядок — хто його помітить. — Хитає головою. — А от це і є клас. Те, що непомітно. Що ніхто й не здогадається, скільки я тут не зламав.
6. Зайшов і не наслідив
Олег, який увесь день краєм ока спостерігав за цією акуратністю, підходить наприкінці — і не бурчить. Дивиться на вузький чистий диф і на неушкоджену сусідню зону та каже просто:
— Ось так із чужим кодом і треба. Зайшов, торкнувся акуратно, вийшов. Не наслідив.
— Дядьку Олеже, ти ж мене місяць пилив за іграшки, — Тьома відривається від екрана. — А хвалиш за один рядок. Раніше мене хвалили, коли багато й яскраво. А ти — коли мало й непомітно.
— Так це й складніше, — знизує плечима Олег. — Наворотити кожен здатен. А зайти в чуже й нічого не зламати — це треба вміти.
Тьома мовчить. І це скупе Олегове «складніше» важить зараз більше, ніж уся офісна похвала за пів екрана анімацій.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ