Hammerhall Сколько стоит Войти

Пул-реквест: просьба втянуть

Выпуск 6 · читать минут 5

Слово: пул-реквест, pull request · где услышишь: каждый день — так команда отдаёт свой код на ревью

«Истории слов» — рубрика буткемпа Hammerhall. Наша команда строит учебную платформу и сервисы вокруг неё, а здесь рассказывает, откуда взялись слова, на которых говорит.

6 апреля 2005 года Линус Торвальдс (Linus Torvalds), автор ядра Linux, пишет в рассылку разработчиков письмо. С 2002 года ядро хранится в BitKeeper — платной программе, которой команде ядра разрешали пользоваться бесплатно. «Последние месяц-два мы пытались уладить спор из-за BitKeeper, — пишет Линус. — Не вышло, и команда ядра ищет замену». А сам он на неделю уходит из сети.

Что случилось, рассказывает официальная книга git: отношения сообщества с компанией, которая делала BitKeeper, разладились, и бесплатно пользоваться программой стало нельзя. Ядру понадобился свой инструмент.

7 апреля у нового инструмента появляется первая запись — с подписью «первая версия git, менеджера информации из ада». 16 апреля в git переезжает само ядро Linux. Его первая запись там кончается словами «Поехали!» (Let it rip!).

Что значит имя, в первом же описании сказано честно: «"git" может значить что угодно, смотря по настроению». Случайные три буквы, которые можно произнести. Если всё работает — «global information tracker», «глобальный учётчик информации». Если ломается — ругательство.

А журналисты тех дней приводили слова Линуса так: «Я эгоист, поэтому называю все проекты в свою честь. Сначала Linux, теперь git». И пояснили: на британском сленге git — «неприятный тип».

«Линус, пожалуйста, втяни»#

Как в такой проект попадает чужой код? Ещё при BitKeeper разработчики писали Линусу письма, которые начинались примерно так: «Линус, пожалуйста, втяни изменения из моего хранилища» — и дальше адрес. По-английски «втянуть» — pull.

Почему не «толкнуть», push? Потому что в чужое хранилище своё не вносят. Ты выкладываешь изменения у себя и говоришь хозяину, откуда их забрать. Решает он.

Слово «втянуть» было в git с первых дней. Уже через 11 дней после первой записи Линус добавил скрипт — программку, которая втягивала чужие изменения и сливала их со своими. Если сливать было нечего, скрипт радостно печатал: «Всё уже свежее. Ура-а!» А летом 2005 года другой разработчик добавил в git команду, которая сама пишет такое письмо: адрес хранилища и список изменений, которые там лежат.

Ядро Linux живёт так и сейчас: по нынешним правилам просьба втянуть уходит письмом с пометкой [GIT PULL] в теме. В этих правилах есть и слова Линуса о том, что в ней главное: «Главное — само сообщение. Я хочу понимать, что я втягиваю и зачем».

Из письма — кнопка, из кнопки — разговор

В 2008 году молодой сайт GitHub, где хранят проекты на git, пишет в блоге: «Oh yeah, there's pull requests now» — «Да, кстати, теперь есть пул-реквесты». Сначала это было, по сути, то же письмо: сделал свою копию чужого проекта, нажал кнопку — хозяину уходит сообщение со ссылкой и просьбой втянуть.

В 2010 году GitHub посчитал: за два с небольшим года отправлено 200 тысяч пул-реквестов. И переделал их. Теперь пул-реквест — «живое обсуждение кода, который ты хочешь влить».

Под ним пишут замечания, к нему досылают исправления, всё видно в одной ленте. Просьба превратилась в разговор. А в 2011 году появилась кнопка, которая вливает код одним нажатием.

Есть поворот. В 2012 году сам Линус написал под пул-реквестом в своё хранилище на GitHub: «Я не принимаю пул-реквесты GitHub». В git, мол, есть хороший способ составить просьбу втянуть, а сайт заменил его своим — куда хуже. Это мнение о пул-реквестах 2012 года — с тех пор они сильно изменились. Но ядро Linux по-прежнему принимает просьбы письмами.

А в GitLab, другом таком сайте, то же самое называется merge request — «просьба слить». В документации GitLab объясняли: GitHub назвал по первому действию хозяина — втянуть, а GitLab — по последнему, о котором просят, — слить. Предмет один, слова два.

Пул-реквест у нас#

У команды задачу сдают одним пул-реквестом: решение и тесты вместе. Без тестов задачу не примут. В описании пишут «Closes #» («закрывает №») и номер задачи. Пока пул-реквест открыт, задача стоит на доске в колонке In Review — «на проверке».

Сначала код проверяет машина — собирается ли он и хватает ли тестов, — потом его читают коллеги. Когда они одобрят и пул-реквест вольют в основную ветку, задача по «Closes #» закроется сама.

В IT-жаргоне рядом со словом живут «апрув» — одобрение — и «мёржить» — сливать, от английского merge. Пишут обычно «пул-реквест», с одной «л».

Слова Линуса подходят и нам: главное в пул-реквесте — сообщение. Тот, кто втягивает, должен понимать, что он втягивает и зачем.

Пул-реквест — не «вношу своё», а «посмотри и забери»: решает тот, кто втягивает.


Источники

← Все истории слов

Попробовать руками

В кузницах Hammerhall — задачи по Java, которые проверяет сервер: решаешь в своей IDE, отправляешь одной командой, проверка запускает твои тесты и закрытые. Сложность растёт вместе с решённым, первые задачи бесплатны.