Comments 24
Если рассматривать эту ситуацию в контексте «сэкономленное время N ревьюверов важнее, чем потерянное время 1 коммитера» — то этим надо заниматься всегда и до упора.
Но так бывает мягко говоря не всегда — и вот тут-то и начитаются сложности.
Да, удобных инструментов переразбиения коммитов просто нет. И уж тем более таких, которые бы еще как-то бы препятствовали выстрелам в ногу — таких вообще даже в теории нет.
К сожалению, с инструментами в этом деле туго.
Однако, если ревьюеры достаточно непреклонны и нещадно разворачивают смешанные изменения, разбивать их очень быстро надоедает. Вырабатывается внутренняя дисциплина, если хотите.
Пример. Сидишь, правишь файлы, а тут, о ужас, стиль кодирования годичной давности залежался. Откладываешь все свои изменения, правишь стиль и отправляешь на ревью. Потом, накладываешь те изменения поверх исправленного стиля и продолжаешь.
И волки сыты, и овцы целы.
В качестве бонуса, не приходится заниматься одновременно несколькими вещами. В центре внимания всегда одна небольшая задача.
Мой личный опыт свидетельствует, что смена подхода происходит, буквально, после нескольких повторений.
Вырабатывается внутренняя дисциплина, если хотите.
Которая нифига не помогает в случае серьезного рефакторинга.
Вот идёт какая-то переработка, в результате которой существенный кусок кода перекраивается — интерфейсы меняются, сорсы переносятся, ненужное выкидывается, и так далее.
И тут мы значит садимся, и начинаем думать, как это всё разбить. Сначала интерфейсы поменять? Это будет рефакторинг кода, который потом пойдет в /dev/null. Сначала новый код добавить? Это будет дублирование функций. Сначала старый убрать? Это вообще не сбилдится.
В итоге возникает необходимость пустопорожней работы: скажем, сначала пишем новый код на место старого и отправляем на ревью, а потом тут же садимся и новый код рефакторим до новых интерфейсов. И как угодно с этим возись, а красочная картинка не сложится — или большой и сложный пуллреквест, или «работа ради работы» чтоб реквест разбился на части и стал попроще.
Не все переделки кода можно разбить на мелкие и удобные для чтения части.
В моём понимании это не «работа ради работы», а «работа ради качества». Мы же применяем code review чтобы найти потенциальные проблемы, а при большом объёме изменений эта техника становится малоэффективной.
Собственно, любая техника контроля качества, которая подразумевает участие человека, теряет эффективность по мере роста этого самого объёма.
Не все переделки кода можно разбить на мелкие и удобные для чтения части.
А вот с этим спорить не возьмусь, наверняка найдутся примеры. Миграция чего-нибудь со сломанной обратной совместимостью, может быть, ещё что-то.
… Чтобы исправить ситуацию, можно разбить эти коммиты на отдельные ветки и создать пул реквесты для каждой из них...
Мне такой подход видится избыточным. Проще отделять разные изменения в разных коммитах в рамках одной ветки. Если ревьюеру необходимо — пусть посмотрит изменения каждого коммита в отдельности, а городить только ради ревью кучу веток считаю бесполезным
Можно ссылку на оригинальную статью?
Я так понимаю, что автор seregazhuk
Хорошо написано, можно целиком вставлять в Code Style
Очень дельные советы.
Если бы все их придерживались — было бы супер )
Тут сверху приведен нормальный сценарий работы программиста — добавил фичу, заметил, что можно порефакторить, порефакторил, исправил багу, откатил половину, т.д. Влезать в этот (тверческий!) процесс с регламентом нельзя. Значит надо как-то подстраивать процесс извне. Очень непопулярно сейчас, но я предпочитаю выборочные ревью по инициативе самого разработчика — когда надо стороннее мнение. Тупой рефакторинг — не ревьювить вообще. Требования аудиторов заткнуть формальным ревью, на которое требуется время не более, чем на кнопку нажать.
В тему: когда-то давно во время очередного холивара на тему как правильно что-то там изобразить в uml диаграмме, я услышал фразу:
"Не надо недооценивать силу простого текстового комментария". Вопрос-предложение: почему бы не увлекаясь формальностями, явно не писать в pr что именно вы хотите от ревьювера?
Как сделать код-ревью быстрее и эффективнее