Пул-реквест: просьба втянуть
Слово: пул-реквест, 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. Пишут обычно «пул-реквест», с одной «л».
Слова Линуса подходят и нам: главное в пул-реквесте — сообщение. Тот, кто втягивает, должен понимать, что он втягивает и зачем.
Пул-реквест — не «вношу своё», а «посмотри и забери»: решает тот, кто втягивает.
Источники
- Pro Git, «A Short History of Git» — официальная книга git: BitKeeper, 2005 год, почему понадобился свой инструмент.
- README первой записи git, 7 апреля 2005 — «the stupid content tracker» и «"git" can mean anything».
- Ядро Linux, «Creating Pull Requests» — как просят втянуть в ядро сегодня: письмо «[GIT PULL]» и слова Линуса о сообщении.
- GitHub Blog, «Oh yeah, there's pull requests now», 2008 — пост о том, что на GitHub появились пул-реквесты.
- GitHub Blog, «Pull Requests 2.0», 2010 — как просьба стала обсуждением кода.
- GitLab Flow, документация GitLab, 2015 — почему у GitLab «merge request».