pool request что это
Pull Request Preview – что это такое и с чем его едят
Работа над крупным проектом – это всегда командная работа. И в этой команде каждый программист занимается реализацией отдельной задачи, работая в своей функциональной ветке GitHub, GitLab, Bitbucket или любого другого репозитория.
После того как разработчик решит задачу, необходимо выполнить слияние результатов с основной веткой проекта для того, чтобы другие участники команды могли использовать разработанные им функции. Содержимое основной ветки собирается и доставляется в production, став достоянием коллег из других отделов или заказчиков.
Но это если не брать в расчет такой этап работы, как Pull Request…
Что такое Pull Request и зачем он нужен?
Как я уже отметил выше, каждый программист в команде занимается разработкой в своей функциональной ветке. Она не затрагивает главную ветку, поэтому изменения, внесенные в код конкретным разработчиком, не появляются в приложении автоматически.
Когда разработчик заканчивает работу над функцией или исправлением бага, он должен уведомить об этом других членов команды, чтобы те провели аудит кода.
По сути, такое уведомление – это и есть пул-реквест. То есть запрос на слияние написанного разработчиком кода с основной веткой для дальнейшей публикации.
Но пул-реквест – это не просто оповещение. Это целая платформа для обсуждения и дальнейшей доработки кода другими членами команды. При каждом пул-запросе формируется отдельная страница, где коллеги разработчика могут оставить комментарии или внести дополнительные изменения в его код.
Если другие разработчики заметят в коде ошибки, то смогут исправить их или предложить более элегантные варианты реализации ожидаемой функции. Если же все в порядке, то код из ветки разработки объединяют с основной (совершают так называемый мердж), а потом публикуют его (эту процедуру называют деплоем), и он попадает непосредственно в приложение. Но не факт, что все будет в порядке…
Почему одного пул-реквеста недостаточно?
Разработчикам приходится создавать отдельные структурные элементы продукта, минимально коммуницируя с другими сотрудниками команды. Да, за качеством кода следят программисты, и они действительно могут обнаружить логические ошибки во внедряемой функции или проконтролировать корректность оформления и структурированность кода.
Но маркетолог, менеджер или заказчик приложения может ничего не понимать в языках программирования. Поэтому он не в силах адекватно оценить, насколько хороша та реализация, которую предлагает разработчик, как она повлияет на текущее состояние продукта, соответствует ли предложенный код техническому заданию заказчика, нужно ли что-то скорректировать, дополнить и т.п. Приходится ждать непосредственного запуска новой функции или сервиса, чтобы все могли оценить его в полной мере. До этого момента коллеги программистов слепо надеются на то, что итоговый результат будет соответствовать общим ожиданиям.
Такой подход негативно сказывается на скорости разработки и периодичности появления новых функций, потому что отсутствие возможности полноценно оценить код всей командой увеличивает временные промежутки между внесением правок в код и последующим тестированием этих правок после деплоя.
В итоге это сильно усложняет процесс разработки в целом, потому что далеко не всегда тот код, что успешно прошел проверку на этапе пул-реквеста, становится тем кодом, который нравится заказчику и другим участникам команды.
И тогда программистам приходится начинать сначала или радикально менять написанный код. Из-за этого увеличивается срок сдачи проекта и затраты, а также нарастает необходимость в возможности проверить Pull Request не только отделом разработки.
На помощь приходит Pull Request Preview
У маркетологов, менеджеров, заказчиков и прочих членов команды, не связанных с разработкой, появилась возможность взглянуть на новые функции или изменения в коде до их внедрения в продукт.
Функция Pull Request Preview – это как деплой, но только в закрытое (временное) окружение, а не в production. Вы можете в полной мере оценить все обновления, что предлагают программисты, не зная кода. Попользоваться ими, проверить на практике или попробовать сломать. И все это – до объединения ветки разработки с основной веткой, то есть без угрозы для действующего продукта.
Такую функцию предлагает Hostman – хостинг для упрощенной публикации сайтов, приложений, баз данных и других продуктов прямо из GitHub или GitLab.
Принцип работы Pull Request Preview в Hostman
Хостинг-провайдер Hostman, партнер Timeweb, недавно запустил функцию Pull Request Preview для своих пользователей. И она позволяет без лишних движений проводить основательное тестирование внедряемых функций всей командой еще до деплоя.
Pull Request Preview в Hostman
Почему я делаю акцент на «без лишних движений»? Потому что все происходит в автоматическом режиме:
Как работает Pull Request
Как работает Pull Request Preview
Рабочий процесс никак не затрагивает программистов. Они действуют по той же схеме, что и раньше, а другие сотрудники получают новые возможности:
Вместо заключения
Возможность до мерджа всем штатом сотрудников опробовать продукт, найти в нем ошибки и принять решение о дальнейшем внедрении – отличное подспорье для бизнеса.
Pull Request Preview позволит ускорить процесс разработки, сократит количество времени, которое уходит на тестирование продукта, что повлечет за собой сокращение потраченных на разработку человеко-часов и бюджета компании. В итоге это позволит реализовывать даже самые смелые задумки (новые функции, масштабную смену дизайна) в короткие сроки и поможет «обогнать конкурентов на поворотах». Там, где другие компании находятся в невыгодном положении, тратя много времени на работу с каждым пул-реквестом, бизнес, использующий Pull Request Review, сможет быстрее принимать решения и идти в ногу с потребностями рынка.
Впрочем, оценить все прелести Pull Request Preview можно самостоятельно. Hostman предлагает новым клиентам бесплатно создать до трех статических сайтов, подключить GitHub и попробовать Pull Request Preview, чтобы на практике увидеть, как работает эта функция и как сильно она может помочь вашему бизнесу.
Pool request что это
Создание и сопровождение Pull Request
При работе над проектом будут создаваться feature-ветки в git, которые потом необходимо вливать в основную ветку (продуктовую или develop, в зависимости от деталей workflow, который используется на проекте). Так или иначе, очень важно понимать, что просто создать Pull Request — это еще не завершение вашей задачи.
Pull Request имеет одно очень неприятное свойство — терять актуальность. Код в target ветке начинает конфликтовать с кодом в вашей feature-ветке, Pull Request может обрасти рядом комментариев и вопросов, которые препятствуют мерджу вашего Pull Request. В общем, создание и сопровождение Pull Request — это такая же задача, как и разработка фичи.
Как оформить Pull Request
Прежде всего ему нужно дать осмысленное название, которое коротко отразит вносимые вами изменения в проект: «добавлен вывод последних новостей», «исправлена ошибка открытия меню» и так далее. Но самое важное — Pull Request должен иметь определенные маркеры в заголовке, отражающие его текущее состояние. Обычно такими маркерами выступают [WIP] (Work In Progress) и [RFC] (Ready For Comment).
Эти маркеры нужны прежде всего для ревьюеров. Если ревьюер увидит Pull Request с маркером [RFC], то он сможет приступить к code review, когда у него будет на это время. Если же в заголовке вашего Pull Request будет стоять маркер [WIP], то будет сразу понятно, что этот Pull Request проверять еще рано.
Кроме того, эти маркеры могут меняться, например, Pull Request уже имел маркер [RFC], но в результате code review были выявлены некоторые проблемы, которые следует устранить. В этом случае необходимо изменить [RFC] на [WIP]. Такой подход поможет сэкономить время ревьюеров, так как они не будут заглядывать в Pull Requests, которые в данный момент не готовы к review.
В итоге, название вашего Pull Request должно быть приблизительно таким:
[RFC] [issue-id] Добавлена возможность оформлять заказ одним кликом
или, если в вашем Repository Hub (Github) нет линков на issues, в названиях Pull Requests:
[WIP] Исправлена ошибка при клике по ссылке на новость
В Github для маркировки Pull Request стоит использовать лейблы вместо текста в заголовках. Лейблы лучше видны, плюс они могут иметь цветовую индикацию, позволяющую определить статус Pull Request еще под цвету маркера, а также настроить фильтры.
Описание Pull Request должно быть максимально информативным. Не нужно писать в нем все, что сделано в вашей feature-ветке, обычно это и так описано в задаче, породившей вашу feature-ветку. В описании следует писать почему вы сделали так, как сделали. Можно еще добавить пару слов о том, на что ревьюерам стоит обратить особое внимание.
Помните, что описание Pull Request в идеале должно ответить на все возможные вопросы.
Но вполне может быть и так, что описание для вашего Pull Request не требуется и все понятно из заголовка. Здесь, к сожалению, нет четкой грани, когда стоит писать описание, а когда его можно опустить, но, если вы чувствуете, что описания может быть недостаточно или оно не отвечает на все вопросы по реализации задачи/фиксу бага, то нужно постараться заранее ответить на них в описании.
Сопровождение Pull Request
Важно понимать, что чем раньше вы ответите на вопрос в вашем Pull Request или разрешите конфликт в коде, тем быстрее этот Pull Request вмержат в target-ветку.
Но бывают ситуации, когда конфликты появляются чаще, чем вы успеваете их разрешать. В этом случае, лучше всего поставить маркер [WIP] и дождаться стабилизации участка кода, который начал активно конфликтовать с вашим Pull Request. Такое бывает, когда происходит merge нескольких похожих Pull Requests.
Очень важно понимать, что целью code review является выявление слабых или некорректных архитектурных решений, а не выполнение работы линтера. Все, что можно автоматизировать, нужно автоматизировать.
В идеале, Pull Request должен автоматически проверяться линтерами, должны прогоняться автотесты, после чего уже ревьюеру следует тратить время на code review. К сожалению, такая автоматизация может быть не на всех проектах, поэтому автору Pull Request в такой ситуации перед проставлением маркера [RFC] в заголовок Pull Request нужно прогнать линтеры и автотесты, чтобы убедиться, что все в порядке.
Желательно, чтобы code review проводили несколько человек (как минимум двое), но не стоит назначать ревьюерами всю команду. Это не очень сильно увеличит эффективность code review, но значительно удорожит этот процесс. Но бывают и исключения, когда все члены команды должны принять участие в code review. Обычно это связано с радикальными изменениями в проекте, либо в его инфраструктуре.
После того, как вы создали Pull Request, успешно прошли стадию code review, исправили все замечания и ответили на все вопросы, ваш Pull Request наверняка получит approve от всех ревьюеров, а уже после этого последует его merge в target-ветку. Поздравляю! Работа над этой задачей завершена, если конечно она не вернется к вам после тестирования QA-инженерами.
Git для SEO-шников, или пул риквесты на Bitbucket
Последнее время мы стали часто сталкиваться с разработчиками из SEO-компаний, которые правят код наших проектов прямо на «боевой» площадке через FTP-клиент. Необходимость использования Git для заказчика я описывал в статье 5 причин внедрить Git для Product Owner’a. Давайте я кратко напомню лишь часть проблем при работе без Git, тем более на боевом сайте
- Нельзя трогать код сайта, которым в данный момент пользуются реальные люди, т.к. мигающий и сыплющий ошибками сайт не помогает репутации бизнеса; Также без Git сразу возникает проблема «Из-за кого это сломалось» и, соответственно, кто будет чинить. А чинить надо быстро; Есть еще и проблема с быстрым откатом на стабильное состояние; Еще одна проблема возникает, когда мы пытаемся доставить свой код на сайт, где кто-то поработал «наживую». Это не удается, и нам приходится просматривать и коммитить чужие изменения, что может занимать продолжительное время и обойтись клиенту в дополнительные расходы;
Давайте разберемся, как быстро и эффективно начать работать SEO-специалисту и web-разработчику через пул-риквесты на Bitbucket. Я записал небольшое видео, ниже его расшифровка. Если возникнут вопросы — смело пишите в комментарии или в социальные сети, мы постараемся вам помочь.
В качестве основы взаимодействия используется Git в качестве системы контроля версий и Bitbucket для хранения кода.
Для начала, SEO–специалисту необходимо создать себе аккаунт на сервисе https://bitbucket.org, заполнив форму регистрации и подтвердив регистрацию перейдя по ссылке в приходящем после этого письме.
После окончания процесса регистрации, SEO-специалист должен сообщить разработчику свой логин на Bitbucket или электронную почту. Свой логин можно найти в адресной строке при переходе на страницу профиля.
Разработчик должен указать этот логин или почту в настройках репозитория на вкладке User and group access с правами доступа только на чтение.
SEO – специалист увидит этот репозиторий в своём ворк-спейсе:
Когда это произойдет, он должен форкнуть репозиторий: для этого необходимо перейти в сам репозиторий и в левом меню нажать на кнопку “Create”, и в меню необходимо выбрать пункт “Fork”. Затем будет необходимо указать название создаваемого репозитория, который будет являться точной копией оригинального. Однако, внутри форка у SEO-специалиста будут права администратора. Именно в этот репозиторий будет необходимо отправлять все изменения.
Для того, чтобы создать пароль для работы с Bitbucket с помощью Git, необходимо перейти в настройки своего пользователя:
На странице отыскать вкладку App passwords, указать необходимые разрешения и заполнить поле Label.
После долгого и сложного процесса генерации во всплывающем окне отобразиться пароль, который необходимо куда-то сохранить, ведь увидеть его ещё раз будет невозможно.
Введя полученный пароль в запрос от Git, репозиторий будет клонирован в текущую директорию.
После этого нужно перейти в work-space и перейти в свой форк оригинального репозитория. Чтобы создать пулл-реквест со своими изменениями, необходимо найти в левом меню пункт Pull requests и воспользоваться кнопкой Create a pull request. На следующей странице необходимо указать с какого репозитория и с какой ветки на какой репозиторий и на какую ветку будет осуществляться пулл-реквест. Также необходимо заполнить title в поле ниже и нажать на кнопку Create a pull request.
Разработчик, получив уведомление о пулл-реквесте, должен проверить отправленные изменения. Для этого ему следует перейти в репозиторий в раздел Pull requests, где будут отображены все пулл-реквесты к текущему репозиторию.
Для того, чтобы соединить изменения из пулл-реквеста с репозиторием, следует воспользоваться кнопкой «Слияние», после чего изменения из пулл-реквеста будут слиты вместе с указанной при пулл-реквесте веткой.
Вот и все. Выглядит сложно, но только в первый раз. Учитесь работать правильно, развивайтесь на благо своих клиентов.
Это блог
Расскажу, как быстро и просто открыть пулл-реквест, на что обратить внимание, и сделать так, чтобы ваш ревьюер не расстраивался. В конце статьи есть чеклист, чтобы быстро проверять по нему.
Предполагаю, что вы уже форкнули проект, склонировали себе форк, что-то там накоммитили и готовы открыть пулл-реквест. Лучше всего читать эту статью параллельно с открыванием пулл-реквеста.
Найдите кнопку «Pull Request»
Не суетитесь и не бегайте по репозиториям, переключая ветки. Сразу, как вы запушили, на главной страничке вашего репозитория появится жёлтая плашка с названием ветки и кнопкой «Compare & pull request».
Эта кнопка — самый короткий путь к открытию пулл-реквеста. Жмите её.
Проверьте ветки
После нажатия кнопки у вас откроется подробная страничка о том, откуда и куда вы открываете пулл-реквест. Посмотрите, куда вольётся ваш код. Он должен попадать в главную ветку основного репозитория. Скорее всего это ветка master. И он должен быть из вашего форка и ветки, в которой вы делали работу.
Куда и откуда попадёт код
Скорее всего так и есть, если вы правильную кнопку нажали.
Проверьте конфликты
Прямо под ветками написано, есть конфликты или нет:
Вот тут нет конфликтов
Бывает, что конфликты есть:
Хорошим тоном считается открывать пулл-реквесты без конфликтов. Поэтому если у вас конфликт, решите его до того, как откроете пулл-реквест. Можно отребейзить вашу ветку от мастера главного репозитория, или можно влить мастер главного репозитория в вашу ветку.
Если вы работаете в команде и не умеете решать конфликты, попросите старшего товарища вам помочь. А если вы студент, попросите наставника 🙂 Вы так же можете сначала открыть пулл-реквест, пусть и с конфликтами, а потом эти конфликты решить.
Напишите заголовок и описание
В форме открытия пулл-реквеста напишите заголовок: коротко что вы сделали. И описание: что конкретно и зачем, а что ещё не доделано.
Проверьте изменённые файлы
Изменённые файлы (дифф)
Почитайте сами свой дифф и проверьте, не попалось ли там чего лишнего. Мог закрасться лишний файл, или вы закомментировали кусок кода, а потом забыли раскомментировать.
На скриншоте выше файл npm-debug.log.1955635711 очевидно лишний. Значит нужно его удалить и закоммитить это, и снова запушить в эту ветку. Если вы нашли ошибку, то просто исправьте её, закоммитьте и запушьте. Потом обновите страничку с диффом и убедитесь, что всё в порядке.
Теперь жмите «Create pull request»! Ура!
Как открыть пулл-реквест:
Подписывайтесь на телеграм-канал про фронтенд, дизайн, работу и жизнь.
Зачем нужен pull request, если есть push?
На текущем проекте мне советовали загружать каждый таск так:
Не совсем понятен четвертый пункт.
Мне советуют для каждого таска ветвь создавать, заливать в нее изменения, и сливать обратно с master.
Я понимаю, что репозитория два: локальный и удаленный.
1 ответ 1
Про организацию Git flow можно почитать в описании метки. Кратко: есть основная ветка master, разработчики создают ветки под конкретные задачи (фича, багфикс), потом сливают их в master. Возможно использование ветки-агрегатора develop, в которой копятся изменения до момента очередного релиза.
Git flow реализуем, когда у всех разработчиков есть право создавать новые ветки в удалённом репозитории. Это часто так при закрытой разработке внутри компании, но почти всегда не так, когда проект хостится открыто. Нельзя просто так взять и запушить свою ветку в чужой репозиторий на GitHub.
Чтобы предложить добавить ваши изменения в основной репозиторий, используется пулл-реквест. Алгоритм создания такой:
Теперь создаётся собственно пулл-реквест, как сущность. У него в том числе есть:
Информация о внесённых изменениях в формате diff. Красным подсвечиваются удалённые строки, зелёным добавленные. Есть общая статистика добавленных и удаленных строк.
Возможность оставлять комментарии к любой строке диффа, а также к пулл-реквесту в целом. Эта невероятно полезная возможность позволяет проводить инспекцию кода прямо в пулл-реквесте.
Информация о новых коммитах в виде дерева.
Автоматическая оценка возможности бесконфликтного слияния. Если оно невозможно, придётся вручную разрешать конфликты, как в обычном слиянии.
Изучив ваш пулл-реквест, владелец основного репозитория может выполнить его слияние (а может и нет). Отсюда и название: не вы «выталкиваете» (push) свои изменения в чужой репозитория, а уполномоченный пользователь их «затаскивает» (pull) в него.