Pull to refresh

Заканчивался последний день рабочей недели…

Reading time2 min
Views5.1K
Заканчивался последний день рабочей недели. Я делал себе кофе на офисной кухне, размышляя, каким образом мы бы смогли снизить очередь пул реквестов, которая сильно разрослась после введения review guide. Вроде бы простые правила вызывали длительную переписку в комментариях к пул реквестам между членами review team и разработчиками фрэймворка.

image

Ничего не предвещало. Смеркалось.

Внезапно рабочий чат зашелестел сообщениями:
– Почему мой пулл реквест удалили?
– И мои пулл реквесты грохнули!
– И мой!

Спустя буквально несколько минут инвестигаций мы выяснили, что это случилось, потому что кто-то удалил рабочую ветку Bootstrap, куда более чем 40 человек контрибьютили более трёх месяцев. Ещё раз, чтобы можно было осознать всю величину проблемы – сорок человек вливали туда код на протяжении более трёх месяцев.

image

Коллеги тут же стали фонтанировать идеями о том, что мы все имеем локальные копии этой ветки, и давайте создадим эту ветку с нуля.

По своему опыту я знаю, что поспешные решения и импровизация не приводят ни к чему хорошему, поэтому я попросил всех не предпринимать никаких действий и буквально «убрать руки с клавиатуры».

image

Итак, диспозиция – пятница, вечер, уже почти пустой офис, потерянная ветка с огромной кодовой базой. Если не решить эту проблему здесь и сейчас, то есть вероятность, что ситуация станет хуже, если на выходных к работе подключатся другие разработчики, которые не в курсе текущей ситуации (мы же все аккуратно читаем рабочий чат, не так ли?).

Я вежливо спросил в чате, кто удалил ветку Bootstrap, и один молодой разработчик, которого включили в работу совсем недавно, признался, что это сделал он по ошибке. «Простите».

image

Я хватаю удачно подвернувшегося под руку специалиста, и мы мчимся к молодому разработчику, который в этот момент переживает экзистенциальный кризис, и чьё рабочее место, по счастливой случайности, находится в том же офисе, что и мы.

Ветку мы, конечно, восстановили – немного git магии, и всё получилось. Чего не скажешь о более чем 20 пулл реквестах, которые так и сгинули в недрах GitHub`а. Неприятно, но не смертельно.
Время перевести дух, разобраться в произошедшем и сделать некоторые выводы.

image

Главный вопрос – зачем? Ответ, в общем-то, тривиальный – случайно. Что-то было не так с кодом, который был закомитан в собственную рабочую ветку – ничего криминального, просто некрасиво код был написан, а если даже ревертишь коммит, то он все равно остается в истории. Поэтому разработчик решил снести всю свою рабочую ветку и создать заново. С чистого листа. И под горячую руку попалась ветка Bootstrap. Пятница. Вечер. Мисклик, да.

image

GitHub позволяет отменить операцию удаления, но только до момента, пока страница не обновлена, и этот шанс использован не был.

Можно ли было избежать этой ситуации? Да, можно. По умолчанию, любой, кто имеет write доступ к вашему репозиторию, может удалить любую ветку. Однако GitHub позволяет создать Branch protection rule для одной или более веток.

image

Где важно убедиться, что соответствующий чек бокс не прочекан.

image

Для ветки bootstrap это сделано не было, и это нас догнало.

В сухом остатке:

  1. Ветку спасли.
  2. Теперь на любую ветку, в которую контрибьютит более чем один человек, мы устанавливаем Protection rule. Что я рекомендую не забывать делать всем.
  3. Поддержку пакета BootStrap в JDI Light мы в итоге реализовали и зарелизили. Но что это и зачем – это уже другая история...
Tags:
Hubs:
+13
Comments18

Articles