Что такое "пул реквест" (pull request), который на GitHub, и как его применить?
Ответы
Ответ 1
Смотрим за руками.
Крутой программер создал репозиторий.
Вы сделали форк его репозитория (т.е. скопировали к себе).
Вы сделали какие-то крутые изменения в своём репозитории.
Теперь если вы хотите, чтобы крутой дядя внёс ваши крутые изменения в свой круто
код. И вы просите, чтобы он взял ваши изменения, т.е. сделал git pull. Это и называетс
pull request
Ответ 2
К вышесказанному можно добавить следующее. Далеко не все пулл-реквесты принимаютс
разработчиками. Тут нужно соблюсти ряд правил:
Пулл-реквест (ПР) должен быть хорошо оформлен и содержать
исчерпывающее описание.
Обычное правило, один баг - один ПР, одна фича - один ПР. Не нужно
пытаться впихнуть сразу кучу всего.
Очень важно соблюдать Code Style того проекта, для которого вы
делаете ПР. Пусть даже он кажется вам противоестественным (например
вы всегда делаете отступы в виде 4 пробелов, а в проекте табы).
Не нужно бояться делать ПР-ы, ведь помочь можно даже в мелочи. Например вы заметил
ошибку перевода в readme файле или вам кажется что какое-то описание фичи можно боле
понятно перефразировать.
На гитхабе миллионы проектов, живущие исключительно на энтузиазме создателей, хороши
ПР-ы очень хорошо подстегивают этот энтузиазм)
Ответ 3
Пулл Реквест это что-то типа сообщения автору оригинального репозитория со смысло
"эй, я тут сделал крутую штуку, рекомендую добавить ее в такую-то ветку". Автор оригинально
репы смотрит на ваши "крутые штуки" и решает - сделать пулл или не сделать, вмерджит
в ветку или нет.
еще добавки к вышесказанному: возможный (я им пользуюсь) механизм работы с репами/pr:
форкаете репозиторий, например https://github.com/rbock/sqlpp11
после этого
git clone https://github.com/ваш_юзернейм/sqlpp11.git
cd sqlpp11
git remote add upstream https://github.com/rbock/sqlpp11.git (т.е. мы добавляем псевдони
upstream для оригинального репозитория, мы не можем добавлять в него изменения, но може
их получать)
git checkout -b названиеБранча (ветки)
теперь вы правите файлы в вашем origin, в вашей ветке, пушите их в свой форк гитхаб
(origin), откуда и делаете pull-request
при этом вы можете сделать git merge/pull/fetch upstream с оригинального репозитори
(upstream)
если в upstream настроена интеграция типа travis-ci (как в моем примере), лучше н
делать пулл-реквесты, пока не настроите travis-ci для своего репозитория и ваши билд
не будут работать правильно (чтобы не мучать мэйнтейнера upstream бессмысленными сообщениям
о неудачных сборках в пулл-реквесте)
общий алгоритм работы примерно такой:
git fetch; git merge upstream/ветка; (master/debug/и т.д.)
сделали изменения: git push, изменения улетают в ваш форк на гитахабе. Eсли настрое
travis, проходят тесты/сборки, когда вы уверены в качестве коммита, делаете pull reques
из вашего форка. Если PR приняли, делаете, допустим, git checkout master; git fetch
git merge upstream/ветка, чтобы ваш форк оставался консистентным с оригиналом.
вмердженные в upstream (оригиальный репозиторй) и в ваш origin/master (ваш фор
на гитхабе, в данном случае) ветки можно удалять - руками или с помощью, например, https://github.com/arc90/git-sweep
Ответ 4
1. Что такое pull request?
1. Определение
pull request — предложение изменения кода в чужом репозитории.
Вы делаете форк чужого репозитория (который иногда и сам может быть форком) → производит
изменения в своём форке → посредством pull request предлагаете изменения владельца
репозитория, чей форк Вы сделали. На GitHub pull request в публичный репозиторий може
осуществить любая/ой зарегистрированная/ый участница/участник.
2. Составляющие pull requests
Изменения, которые собираетесь внести в чужой репозиторий,
Описание этих изменений.
Рекомендации по грамотному внесению pull requests расписаны в ответе ув-мого IonDen.
3. Разновидности pull requests
Все pull requests можно разделить на следующие категории:
Исправление багов, ошибок, конфликтов с другими приложениями,
Добавление новых функций, возможностей,
Рефакторинг, стилевые правки. Если владелица/владелец репозитория не значительн
хуже Вас разбирается в коде репозитория, лучше не злоупотреблять pull requests данно
категории.
4. Дополнительная ссылка
«Pull request'ы на GitHub или Как мне внести изменения в чужой проект» — статья н
Хабрахабре.
2. Как сделать и принять pull request при помощи hub
1. Что такое hub?
hub — консольное приложение, упрощающее введение команд git, обёртка для git. Например
чтобы клонировать репозиторий, используя git, мы должны ввести в терминал:
git clone https://github.com/Kristinita/SashaSublime.git
В hub команда выглядит проще:
hub clone Kristinita/SashaSublime
Полный список команд hub, и что они упрощают, см. в документации hub.
На момент написания ответа (ноябрь 2016) hub работает только с GitHub, но не BitBucke
или прочими ресурсами для хранения кода. Для пользователей Windows доступна установк
через пакетный менеджер Chocolatey — cinst hub -y.
2. Зачем использовать hub?
Фиксить мелкие баги и опечатки, а затем сделать pull-request проще через веб-интерфей
GitHub. Однако если Ваши изменения довольно значительны, лучше клонировать репозитори
к себе на компьютер по следующим причинам:
IDE/продвинутые текстовые редакторы предоставляют значительно больше возможносте
для работы с кодом в сравнении с редактированием в вебе;
Могут понадобиться разного рода тесты, недоступные при редактировании в веб-интерфейсе;
Для многих предпочтительнее работать в терминале.
Итак, вы решили клонировать репозиторий. hub упрощает:
Клонирование удалённого репозитория; рассмотрено в п. 2.1 данного ответа;
Форк; достаточно ввести в терминал hub fork;
pull request; после того, как Вы запушили изменения в свой форк, достаточно ввест
в терминал hub pull-request.
3. Настройка hub перед использованием
Создайте пользовательскую переменную среды GIT_EDITOR, — это сделать просто при помощ
Rapid Environment Editor, — значением для которой будет путь к исполняемому файлу Вашег
редактора, в котором Вам удобно писать pull request message, — описание Вашего pul
request, — при необходимости добавив аргументы командной строки. Например, у меня дл
Sublime Text значение вышло следующим:
"D:\Sublime Text 3 x64\sublime_text.exe" -n -w
Если путь к исполняемому файлу содержит пробелы, во избежание багов, лучше заключит
его в кавычки.
При использовании hub в Windows и открытии редактируемых файлов в Sublime Text могу
возникнуть проблемы с pull requests от имени администратора. Поскольку это не перва
моя проблема, связанная с UAC, а толку от него не вижу, я отключил у себя контроль учётны
записей.
Комментарии — текст под сообщением во вкладке PULLREQ_EDITMSG — по умолчанию выделяютс
#октоторпами#. Но когда Вы внесёте pull request в чужой репозиторий, то обнаружите
что текст под сообщением отобразится как заголовки, а не комментарии.
Необходима настройка git. Введите в терминал команду:
git config --global core.commentChar %
Отныне комментариям во вкладке PULLREQ_EDITMSG будут предшествовать символы %процента%
после внесения pull request комментариев не будет видно как визуально, так и в исходно
коде описания к pull request.
При необходимости резервных копий или синхронизации пользовательской конфигураци
файлов git узнать, где хранятся конфигурационные файлы git, начиная с версии 2.8 можн
командой:
git config --list --show-origin
Например, у меня в Windows 10 путь к файлу, где хранится данная настройка для комментариев
оказался следующим:
file:C:/Users/SashaChernykh/.gitconfig core.commentchar=%
Если Ваша проблема отлична от расписанных здесь, и её разрешения не получается найт
поисками Google и по репозиторию; попробуйте ещё раз воспроизвести проблему, перед введение
команд hub послав в терминал следующую команду:
set HUB_VERBOSE=1
В терминале появится отладочная информация. Если и по ней не получилось разрешит
проблему, создайте багрепорт в issue tracker hub, приложив к сообщению вывод Вашег
терминала вместе с отладочной информацией.
4. Пример создания pull request через hub
Сделаем посредством PowerShell и hub pull request в репозиторий https://github.com/LightAlf/bioRepo1
Помимо вышеперечисленных команд hub в примере используются также команды git, о предназначени
которых можно узнать, например, из данного или этого ресурсов на русском.
PS E:\> hub clone LightAlf/bioRepo1
Cloning into 'bioRepo1'...
remote: Counting objects: 16, done.
remote: Total 16 (delta 0), reused 0 (delta 0), pack-reused 16
Unpacking objects: 100% (16/16), done.
PS E:\> cd bioRepo1
PS E:\bioRepo1> Invoke-Item README.MD
# В Вашем редакторе открывается файл README.MD → вносите в него изменения → сохраняет
файл.
PS E:\bioRepo1> git add .
PS E:\bioRepo1> git commit -m "Тестирование pull-request посредством hub"
[master 839c146] Тестирование pull-request посредством hub
1 file changed, 2 insertions(+)
PS E:\bioRepo1> hub fork
Updating Kristinita
From https://github.com/LightAlf/bioRepo1
* [new branch] discuss -> Kristinita/discuss
* [new branch] master -> Kristinita/master
new remote: Kristinita
PS E:\bioRepo1> git checkout -b SashaGoddess
Switched to a new branch 'SashaGoddess'
PS E:\bioRepo1> git push Kristinita SashaGoddess
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 471 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/Kristinita/bioRepo1.git
* [new branch] SashaGoddess -> SashaGoddess
PS E:\bioRepo1> hub pull-request
# Откроется вкладка с файлом PULLREQ_EDITMSG, как на картинке ниже → вписываете
него изменения → сохраняете файл → закрываете его.
https://github.com/LightAlf/bioRepo1/pull/2
PS E:\bioRepo1>
Результат:
5. Пример принятия pull-request при помощи hub
Если pull request предложен Вам, Вы можете принять его из терминала, воспользовавшис
командой hub — hub merge. Изменения будут влиты в Ваш локальный репозиторий; чтобы перенест
их на удалённый, следует сделать git push. Пример, как принять pull-request. если ветка
в которую предложили сделать pull request, является веткой по умолчанию.
SashaChernykh@DESKTOP-0G54NVG MINGW32 /e/SashaChocolatey (master)
# Где E:\SashaChocolatey — локальный репозиторий, в связанный с которым удалённы
репозиторий был внесён pull-request
$ hub merge https://github.com/Kristinita/SashaChocolatey/pull/1
# Где https://github.com/Kristinita/SashaChocolatey/pull/1 — ссылка на pull-request
Merge made by the 'recursive' strategy.
packages/Karens Replicator/tools/chocolateyinstall.ps1 | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
SashaChernykh@DESKTOP-0G54NVG MINGW32 /e/SashaChocolatey (master)
$ hub push
Counting objects: 15, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (13/13), done.
Writing objects: 100% (15/15), 1.56 KiB | 0 bytes/s, done.
Total 15 (delta 8), reused 0 (delta 0)
remote: Resolving deltas: 100% (8/8), completed with 3 local objects.
To https://github.com/Kristinita/SashaChocolatey.git
79ebe12..5045130 master -> master
Результат:
В описании коммита по умолчанию будут ссылки на коммит, которым приниматеся pul
request, и на сам pull request, а также его заголовок.
Пользовательница/пользователь GitHub, у которой/которого Вы приняли pull request
не сразу, но будет указана/указан в числе контрибьюторов Вашего репозитория.
3. Дополнительная ссылка
Документация и список команд hub.
Комментариев нет:
Отправить комментарий