tgoop.com/it_human/863
Last Update:
Git - это опасно
У меня когда-то давно уже выходил пост с заголовком IT - это опасно.
Хочу вернуться к этой теме, так как буквально неделю назад снова наступили на те же грабли. Ещё в августе я фиксила некоторые баги в нашем проекте на работе. В ноябре обнаружила, что всё, что я чинила - снова сломано, и баги каким-то чудом "вернулись" в проект. Стала разбираться. Выяснилось, что один коллега, когда заливал свои изменения в проект, каким-то образом в гите перезатёр все мои изменения, и вернул в код старую версию, которая была ещё до августа. Причем, коллега не джун и не новичок. Но гит - инструмент мощный и умеет многое, поэтому, используя его, нужно всегда хорошо понимать, что ты делаешь. Действуя наобум, наверняка что-то сломаешь.
Для тех, кому слово "гит" и всё, что написано ниже ни о чем не говорит - почитайте мои вводные посты к гиту - раз и два.
Что же у нас пошло не так? Бывалые люди говорят - "так нельзя же пушить напрямую в мастер". Но в том-то и смех, что напрямую в мастер никто не пушил, всё как положено - через пул-реквесты, и через код-ревью. Но когда коллега мержил свой пул-реквест, возникли конфликты - часть изменений в мастере уже была новее чем та версия, от которой он изначально создавал свою ветку. Он стал решать конфликты вручную, то есть выбирать - какие куски кода взять из более новой версии мастера, а какие оставить в старом виде. И почему-то кучу мест вернул к старой версии, вместо того, чтобы подтянуть новые изменения.
В довершение - все изменения, которые он добавлял в проект от себя касались только форматирования кода - он его прогнал через линтеры, чтобы код выглядел красивее. Никакой логики в проекте менять не планировал. То есть ради приведения кода к единому стилю, был поломан работающий код и зачем-то откачен к более ранней багованной версии. Случайно, конечно.
А чтобы всё было хорошо, стоило всего-то - взять самую последнюю новую версию кода из мастера и в отдельной ветке прогнать код через свои линтеры. Поскольку никаких других изменений в логике кода не планировалось, то и смысла разбирать руками каждый конфликт при мерже (а это муторно, долго и сложно) - не было никакого.
Так что просто будьте осторожнее с гитом, и дважды подумайте и перепроверьте все изменения перед тем, как что-то вливать в основную ветку проекта. Не поломали ли вы там что-то? Не откатили ли изменения, внесённые другими разработчиками? Я не ожидала, что такие детские ошибки могут совершать не только новички - но вот, бывает же.
BY Программирование для гуманитариев
Share with your friend now:
tgoop.com/it_human/863