Почему Git pull request называется «pull» и не «push»?
Узнайте исторические и технические причины, почему в Git термин «pull request» используется вместо «push request», и как это влияет на рабочие процессы.
Почему в Git запрос на слияние называется «pull request», а не «push request»?
В Git действие слияния ветки в официальное репозиторий называется «pull request». Это может сбивать с толку, поскольку кажется, что разработчик запрашивает отправку своих изменений в официальный репозиторий. Какова историческая и техническая причина использования термина «pull request» вместо «push request» в Git?
A Git pull request называется «pull» потому, что исторически это относится к тому, как целевой репозиторий «захватывает» изменения из репозитория разработчика, а не к тому, что разработчик напрямую «пушит» их в основной репозиторий. Такая терминология точно отражает фактическую операцию Git и соответствует моделям разрешений, используемым в совместных рабочих процессах, где разработчики часто не имеют прямого доступа к push в официальные репозитории.
Содержание
- Исторические истоки pull request
- Техническое определение «pull» в Git
- Модели разрешений и рабочий процесс
- Git pull vs. Git pull request
- Эволюция терминологии pull request
Исторические истоки pull request
Термин «pull request» возник в раннем развитии Git, когда распределённый характер Git создал потребность в определённом рабочем процессе. До появления GitHub и других платформ, популяризировавших pull request, разработчики, работающие над open‑source проектами, часто не имели прямых прав push в основной репозиторий.
Согласно обсуждениям на Stack Overflow, исторически «Git‑пользователи, не имеющие прав push в master, коммитили свои изменения в отдельную ветку, а затем выполняли git request-pull для того, чтобы мейнтейнеры «захватили» их коммиты в master».
Команда git request-pull была впервые написана в июле 2005 года Райаном Андерсоном, как упоминается в историческом анализе rdnlsmith. Эта команда генерировала форматированный запрос, который мейнтейнеры могли использовать для «захвата» изменений из репозитория разработчика, тем самым создавая основу того, что мы сейчас называем pull request.
Техническое определение «pull» в Git
В терминологии Git «pull» конкретно относится к комбинации git fetch и git merge — загрузке коммитов из удалённого репозитория и последующему их слиянию в текущую ветку.
Как объясняется в SRE‑блоге, «Pull — это то, как целевой репозиторий захватывает ваши изменения, чтобы они появились там (git pull из другого репозитория).»
Техническое различие важно:
git push: перемещает коммиты из локального репозитория в удалённыйgit pull: перемещает коммиты из удалённого репозитория в локальный- Pull request: запрос к целевому репозиторию выполнить операцию «pull»
Эта техническая точность означает, что при слиянии pull request целевой репозиторий фактически выполняет операцию pull, чтобы включить изменения, делая терминологию технически корректной.
Модели разрешений и рабочий процесс
Модель разрешений во многих Git‑рабочих процессах объясняет, почему «pull» имеет больше смысла, чем «push». Как отмечено в обсуждениях на Reddit, «во многих рабочих процессах у разработчика нет прав push в целевой репозиторий, но он может создать pull request в целевом репозитории, который ссылается на ветку в другом репозитории (часто форке), к которому у него есть доступ».
Это создаёт рабочий процесс, где:
- Разработчик пушит изменения в свой собственный fork/репозиторий (где у него есть права)
- Разработчик создаёт pull request, просит мейнтейнеров «захватить» эти изменения
- Мейнтейнеры проверяют и при необходимости «захватывают» изменения в основной репозиторий
Эта модель особенно важна в open‑source разработке, где прямой доступ push к основным репозиториям часто ограничен. Механизм pull request обеспечивает структурированный способ управления вкладами без предоставления широких прав push.
Git pull vs. Git pull request
Существует важное различие между git pull (командой Git) и «pull request» (концепцией GitHub/GitLab).
Как отмечено в Stack Overflow, ««pull» не относится просто к слиянию. Pull request — это о «захвате»: получение коммитов из удалённого репозитория и их последующее слияние».
Команда git pull конкретно объединяет операции fetch и merge, тогда как pull request — это более высокий уровень концепции, который облегчает обзор кода и совместную работу до фактической операции pull. Pull request по сути является запросом выполнить операцию, похожую на git pull, но с дополнительными шагами обзора и утверждения.
Эволюция терминологии pull request
Хотя «pull request» является стандартной терминологией сегодня, обсуждалось, может ли «push request» быть более интуитивно понятным. Однако исторический контекст и техническая точность «pull request» удержали его как стандартный термин.
Как отмечено в pvq.app, «терминология «pull request» может сначала показаться запутанной, но она укоренилась в историческом контексте и концептуально соответствует действию запроса изменений, чтобы их «захватили» в официальный репозиторий».
Со временем платформы, такие как GitHub и GitLab, приняли и стандартизировали термин «pull request», сделав его отраслевым стандартом, несмотря на первоначальную путаницу у новых пользователей. Терминология сохранилась, потому что она точно описывает базовые операции Git и исторические рабочие процессы.
Источники
- Stack Overflow – Why is a git ‘pull request’ not called a ‘push request’?
- Reddit – Why is it called a pull request instead of a merge or add request?
- Stack Overflow – Shouldn’t Pull Requests be called Push Requests?
- SRE Blog – Why is a git ‘pull request’ not called a ‘push request’?
- rdnlsmith – A Brief History of the Pull Request
- Git Documentation – git-request-pull
- pvq.app – Why is a git ‘pull request’ not called a ‘push request’?
Заключение
Термин «pull request» в Git коренится в исторических рабочих процессах, где разработчики с ограниченными правами просили мейнтейнеров «захватить» их изменения, а не напрямую «пушить» их в основной репозиторий. Эта терминология точно отражает техническую операцию, которую выполняет целевой репозиторий при принятии изменений, объединяя fetch и merge. Хотя «push request» может показаться более интуитивным с точки зрения разработчика, «pull request» корректно описывает фактическую операцию, выполняемую целевым репозиторием, и сохраняет согласованность с основной терминологией Git.
Для разработчиков, работающих с Git сегодня, понимание этого исторического контекста помогает объяснить, почему кажущаяся нелогичной терминология сохраняется и почему она на самом деле имеет техническое обоснование, учитывая базовые операции Git и совместные рабочие процессы, для которых Git был создан.