Как сделать pull request на github

Как сделать pull request на github

Практическое занятие «Процесс Pull request на GitHub»

На предыдущем занятии Используем клиент GitHub для десктопа, мы использовали Github Desktop для управления рабочим процессом коммитов, ветвления и слияния. На этом занятии мы будем выполнять аналогичные действия, но с использованием браузерного интерфейса, который предоставляет Github, вместо использования терминала или Github Desktop.

Понимание процесса Pull request является важным для анализа изменений в опен-сорс проекте с несколькими участниками. Использование интерфейса GitHub также удобно, если рецензенты не знакомы с терминалом или Github Desktop.

Создание изменение в отдельной ветке

По умолчанию в новом репозитории есть одна ветка с именем «Master». Обычно, когда при внесении изменений или просмотра / редактировании, создается новая ветка и вносятся все изменения в ветку. Затем, по окончании, владелец репо объединяет изменения из новой ветки в «Master» через «pull request».

Для создания изменений в отдельной ветке:

При создании новой ветки, содержимое из главной (или любой другой ветки, которая сейчас просматривается) копируется в новую ветку. Процесс похож на «Сохранить как» с существующим документом.

Рецензенты могут продолжать вносить изменения таким образом, пока не закончат просмотр всей документации. Все изменения делаются в этой новой ветке, а не в мастере.

Создание Pull request

Для создания Pull request:

Когда мы сравниваем ветку с мастером, мы увидим список всех изменений. Мы можем просмотреть изменения в двух режимах просмотра: Unified или Split (это вкладки, показанные справа от содержимого). Unified показывает правки вместе в одной области содержимого, тогда как split показывает два файла рядом.

Владелец репозитория увидит pull request и сможет принять меры для его объединения.

Процесс Pull request

Теперь посмотрим на процесс со стороны владельцем проекта, который получил новый Pull request. Владельцу нужно обработать Pull request и объединить ветку sme-review с “Master”.

Также стоит обратить внимание, что если запрос на извлечение выполняется для более старой версии мастера, где исходное содержимое мастера больше не существует или перемещено в другое место, процесс слияния будет более трудным для выполнения.

Ветка sme-review объединяется с мастером. Теперь “Master” и ветка sme-review совпадают (ветки “смержены”).

Если посмотреть на список веток, то после удаления ветка sme-review больше не отображается.

Добавление участников в проект

Иногда необходимо добавлять соавторов в проект Github, чтобы они могли вносить изменения в ветку. Если другие участники проекта, не являясь соавторами, захотят внести изменения, они получат сообщение об ошибке. (Inviting collaborators to a personal repository)

Человек без прав на запись, может “форкнуть” (скопировать) репо, а не вносить изменения в ветку в том же проекте. Однако копирование проекта клонирует весь репозиторий, а не создает ветку в том же репозитории. Форк (копия) будет существовать в учетной записи пользователя GitHub. Можно объединить форкнутый репозиторий (это типичная модель для опен-сорс проектов со многими внешними участниками), но этот сценарий, вероятно, менее распространен для технических писателей, работающих с разработчиками в тех же проектах.

Для добавления соавторов в проект:

Как сделать свой первый Pull Request

07 Марта 2016 • Михаил Панков • руководства • поддержите на Patreon

Предполагается знание основ системы контроля версий Git. Если вы ещё не работали с Git, мы дадим ссылки на официальную русскоязычную документацию по необходимым командам.

Вам также потребуется аккаунт на GitHub. Регистрация бесплатная и требует указания лишь имени пользователя и электронной почты.

Вот процесс с высоты птичьего полёта.

Работа над задачей закончена!

Теперь рассмотрим каждый этап подробнее.

Форкаем проект

Поэтому мы форкаем проект — это создаст копию репозитория в вашем аккаунте. При этом у вас появится доступ на запись в вашу копию.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Через мгновение вы будете перенаправлены на страницу вашего форка.

Клонируем репозиторий

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Затем выполняем команду в терминале ( или командной строке Windows):

Создаём ветку

Теперь заходим в наш склонированный репозиторий и создаём ветку:

Вторая команда создаст ветку и перейдёт на неё ( сделает checkout).

Делаем изменения

Эти изменения мы коммитим в нашу ветку. Как это сделать — ниже.

Если вы уже достаточно разбираетесь в Git, такие не-атомарные изменения потом нужно объединить в один коммит с помощью interactive rebase и squash.

В выводе есть все необходимые вам команды:

Формат сообщения о коммите таков:

В наших проектах нужно использовать Fix #123 или Close #123 на последней строке сообщения коммита.

Проверяем изменения

Создаём Pull Request

Чтобы создать Pull Request, зайдём на страницу вашего форка. Справа от выпадающего меню с выбором ветки есть кнопка « New pull request».

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Вы попадаете в окно сравнения веток.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

После нажатия кнопки появится окно ввода сообщения Pull Request.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Участвуем в Code Review

Если кто-то ведёт себя неадекватно — не медлите. Сначала сообщите об этом собеседнику и призовите его к благоразумию. Если не сработало — смело обращайтесь к рецензенту или к автору данного текста ( Панкову Михаилу — @mkpankov). Это можно сделать в нашем чате.

Пожелание относительно процесса рецензирования — постарайтесь не сильно затягивать с ответами на комментарии или изменением указанных вещей.

Поздравляем! Теперь вы полноправный участник проекта.

Завершение работы

А теперь можно удалить нашу ветку fix-protobaz локально:

Как сделать первый пул-реквест на GitHub

Перевод статьи «How to make your first pull request on GitHub».

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Что такое форк?

Когда нам нравится чей-то репозиторий и мы хотели бы иметь его в собственном аккаунте на GitHub, мы делаем форк («вилку») этого репозитория, чтобы иметь возможность работать с ним отдельно.

Когда мы делаем форк репозитория, мы получаем экземпляр всего репозитория, со всей его историей. После форка мы можем делать с ним все, что угодно: оригинальная версия при этом не будет задета.

Что такое пул-реквест?

Пул-реквесты нужны. Когда мы хотим принять участие в групповой разработке проектов с открытым исходным кодом.

Например, пользователь Павел делает форк репозитория ThanoshanMV (автора статьи, — прим. перев.) и вносит изменения в свой экземпляр. После этого Павел отсылает пул-реквест ThanoshanMV, который может либо принять его, либо отклонить. По сути это что-то вроде письма «Не будете ли вы так любезны, уважаемый ThanoshanMV, внести мои изменения в свой оригинальный репозиторий?»

Как можно стать контрибьютором проекта?

Участие в проекте с открытым исходным кодом не обязательно предполагает работу именно с кодом. Контрибьютором (участником) можно стать и другими способами, некоторые из них описаны ниже.

Давайте создадим наш первый пул-реквест!

1. Форк репозитория

Чтобы сделать форк репозитория, нужно нажать кнопку «Fork» в верху страницы. Таким образом вы создадите экземпляр всего этого репозитория в своем аккаунте.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

2. Клонирование репозитория

Когда репозиторий уже есть в вашем аккаунте, вы можете клонировать его на свою машину и в дальнейшем работать с ним локально.

Чтобы клонировать репозиторий, нажмите кнопку «clone» и скопируйте ссылку.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Откройте терминал и запустите следующую команду. С ее помощью репозиторий будет клонирован на вашу машину.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Теперь у вас есть копия ветки master основного онлайн-репозитория проекта.

Переходим в клонированную директорию:

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

3. Создание ветки

При работе с репозиторием хорошей практикой считается создание отдельной ветки для внесения изменений, причем это не зависит от размеров проекта.

Имя ветки должно быть коротким и отражать те изменения, которые вы вносите.

Создадим ветку при помощи команды git checkout:

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

4. Внесение изменений и коммит

Внесите необходимы изменения в проект и сохраните их. Затем запустите команду git status: вы увидите внесенные изменения.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Добавьте эти изменения в только что созданную ветку при помощи команды git add:

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Теперь вы можете сделать коммит этих изменений при помощи команды git commit:

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

5. Отправка изменений на GitHub

Чтобы отправить изменения на GitHub (сделать push), нужно определить имя удаленного репозитория.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Имя данного удаленного репозитория — «origin».

После определения имени можно безопасно отправить изменения на GitHub.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

6. Создание пул-реквеста

Перейдите в свой репозиторий на GitHub. Там есть кнопка «Compare & pull request» — кликните ее.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Введите необходимые детали относительно того, что именно вы сделали (чтобы поставить ссылку на issues, возмользуйтесь знаком «решетки»). После этого можно нажать кнопку подтверждения внизу.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Поздравляю! Вы создали свой первый пул-реквест. Если его примут, вы получите уведомление по электронной почте.

7. Синхронизация вашего форка с основной веткой

Прежде чем создавать пул-реквест в оригинальный репозиторий, нужно синхронизировать свой экземпляр этого репозитория с оригинальным.

Даже если вы не собираетесь отправлять пул-реквест в оригинальный репозиторий, все равно лучше синхронизироваться с ним. Со времени создания форка в оригинальном репозитории могли добавиться новые фичи, а также могли быть исправлены какие-то баги.

Проделайте следующие действия, чтобы обновить свой репозиторий и внести соответствующие изменения в свою ветку master:

1. Для начала, проверьте, в какой ветке вы находитесь.

Вы получите список всех веток, причем активная будет подсвечена зеленым.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

2. Переключитесь в ветку master.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

3. Добавьте оригинальный репозиторий в качестве upstream-репозитория.

Чтобы вытащить изменения из оригинального репозитория и перенести их в свою версию, нужно добавить оригинальный git-репозиторий в качестве upstream-репозитория.

Здесь [HTTPS] это url, который нужно скопировать из основного репозитория.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

4. Fetch репозитория

Заберите (fetch) все изменения из оригинального репозитория. Коммиты, сделанные в оригинальном репозитории, будут сохранены в локальной ветке под названием upstream/master.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

5. Слейте изменения

Слейте (merge) изменения из upstream/master с вашей локальной веткой master. Таким образом главная ветка вашего форка репозитория синхронизируется с upstream-репозиторием без потери ваших локальных изменений.

6. Отправьте изменения на GitHub

На этом этапе ваша локальная ветка синхронизирована с веткой master оригинального репозитория. Если вы хотите обновить свой GitHub-репозиторий, нужно отправить в него изменения.

Примечание. После синхронизации ветки master вашего форка вы можете при желании удалить remote. Но в будущем вам еще придется обновлять/синхронизировать ваш репозиторий, поэтому лучше его сохранить.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

8. Удаление ненужной ветки

Ветки создаются с какими-то конкретными целями. Когда цель достигнута, необходимость в ветке отпадает, поэтому ее можно удалить.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Вы можете удалить и версию этой ветки на GitHub.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Итоги

GitHub это мощный инструмент для контроля истории версий. Каждый может стать контрибьютором проекта с открытым исходным кодом. Делается это путем отправки пул-реквестов.

Чтобы стать контрибьютором, не обязательно писать код: есть и другие способы принять участие в проекте.

Наконец, я хотел бы также сказать, что не стоит переживать, если ваши пул-реквесты отклонят. Мейнтейнеры тратят много времени на улучшение своих проектов и они, безусловно, лучше знают эти проекты, чем вы. Поэтому не стоит переживать, если они решат не вливать в свой проект ваши изменения.

Pull request’ы на GitHub или Как мне внести изменения в чужой проект

По просьбе tulskiy делаю вольный перевод частей официальной документации GitHub’а Fork A Repo и Send pull requests.

Итак, что же такое «запрос на включение (сделанных вами изменений)» (именно так я перевёл pull request)? В официальной документации гитхаба говорится следующее:

Pull request’ы позволяют вам рассказать другим о тех изменениях, которые вы разместили в своём GitHub-репозитории. Как только pull request отправлен, заинтересованные стороны рассматривают ваши изменения, обсуждают возможные правки или даже добавляют дополняющие коммиты, если нужно.

Немного о моделях совместной разработки

Делаем копию репозитория

Рассматривая первую модель разработки, необходимо иметь свою копию изначального репозитория, в которой и будет вестись работа, и изменения из которой и будут предлагаться затем автору изначального репозитория.

В рамках руководства, будем считать, что мы работаем над репозиторием Spoon-Knife пользователя octocat, а ваше имя пользователя — username.

Сделать это очень просто: на странице репозитория имеется кнопочка «Fork», которую и следует нажать.
Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

После чего, эту свою копию уже можно «стянуть» на свой компьютер:

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

Делаем работу

Итак, в этой точке мы уже можем править код и делать коммиты. Если вы сделали все предыдущие шаги, чтобы потом вернуть ваши изменения в оригинальный репозиторий, то я настоятельно советую делать всю работу в отдельной тематической ветви разработки. Полезность этого станет ясна на этапе посылки pull request’а. Пускай она будет называться feature.

Вот, теперь творите добро (и пусть оно будет выражаться в коммитах).

Как только вы сделали работу (или её часть), отправьте её в свою копию репозитория на GitHub:

Возвращаем изменения: Pull request

Итак, всё сделано. Вы написали код, он у вас в ветви feature как у вас на компьютере, так и на GitHub’е. Осталось только «заслать» его в оригинальный репозиторий.

Идите на страницу вашей копии репозитория на GitHub, выбирайте ветвь feature и жмите кнопку Pull Request.
Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Далее вы попадёте на предпросмотровую страницу, на которой сможете ввести название и описание ваших изменений (название потом попадёт в описание мёрдж-коммита и станет достоянием общественности, учтите это).
Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Там же вы можете посмотреть, какие коммиты попали в пулл реквест:
Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

А так же общий diff всех изменений в пулл реквесте:
Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

По умолчанию, пулл реквесты считаются основанными на самой часто интегрируемой ветви родительского репозитория. В этом случае username/Spoon-Knife был скопирован с octocat/Spoon-Knife, так что pull request считается основанным на ветке master репозитория octocat/Spoon-Knife. В большинстве случаев, это будет корректно, но если не так, то вы можете нажать на кнопку «Change Commits»

Вы попадёте в форму выбора базовой и исходной ветвей:
Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Слева выбираете в какую ветку будут вливаться изменения в родительском репозитории, справа — какие изменения будут браться с вашего репозитория. По примеру: справа octocat/Spoon-Knife/master, слева username/Spoon-Knife/feature. Здесь вы можете указывать не только ветки, но так же теги и id отдельных коммитов в соответствующем репозитории.
ВАЖНО: Договоритесь с владельцем «родительского» репозитория, в какую ветку будете вливать изменения (он может написать это в README)

Изменение базового репозитория меняет и список людей, кто получит уведомление о пулл реквесте. Каждый, кто имеет право «на запись» в базовый репозиторий, получит письмо и увидит уведомление на главной GitHub’а, в следующий раз, как на него зайдёт.
Как только список коммитов вас удовлетворит, нажмите кнопку Update Commit Range.

Когда вы ввели название и описание и перепроверили список коммитов и изменения в файлы, попавшие в пулл реквест, нажмите кнопку Send pull request. Пулл реквест будет создан незамедлительно.

Что дальше?

Следите за вашим пулл-реквестом. Что прокомментируют люди, что скажет мэйнтэйнер, примет или нет ваш пулл реквест.

Когда ваш pull request примут, не забудьте слить изменения в свой репозиторий (или удалить его, если больше не нужен):

Так же можно удалить ветку, в которой велась разработка:

Что следует делать, если работа заняла большое время и оригинальный репозиторий успел уйти вперёд?

Можно просто влить изменения из оригинального репозитория к себе:

Однако хозяину оригинального репозитория или, может быть, даже вам, не понравится наличие мёрж-коммитов и коммитов из master’а в списке коммитов на пулл. В таком случае вам стоит воспользоваться git rebase.

Прочитать про то, как работает rebase можно в официальном руководстве. Там имеются и очень понятные иллюстрации. Так же есть статья в помощи GitHub.
ВНИМАНИЕ: Пожалуйста, учтите, что git rebase меняет id коммитов! Поэтому, все действия с этой командой стоит выполнять только на локальном репозитории, до того, как эти коммиты станут общедоступны, т.е. до того, как вы их push’нули на гитхаб.

Если вы хозяин: Как принять pull request

Если пулл реквест удовлетворяет всем условиям, то кто-либо с правом «на запись» (т.е. может сделать push) в целевой репозиторий, должен принять pull request одним из многих методов. Ниже описаны три наиболее популярных метода:

Auto Merge (автослияние)

Во многих случаях можно попросить github автоматически принять пулл реквест, используя большую зелёную кнопку Merge Pull Request, которая сама вольёт изменения, создаст мёрж-коммит и закроет пулл реквест.
Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github
Подробнее можно почитать в этом хабратопике: Кнопка слияния на GitHub.

Fetch and Merge (скачать и слить)

Основной метод вливания изменений. Он требует добавления remote, ведущего к репозиторию человека, отправившего pull request, скачивания изменений с этого репозитория, объединения нужной ветви, исправления конфликтов и выгрузки обновлённой ветви обратно в исходный репозиторий:

Patch and Apply (пропатчить и принять)

Предыдущий метод работает хорошо, когда вы работаете в команде или постоянно принимаете изменения от одной и той же группы людей. Другой метод немного быстрее в единичных случаях при использовании git-am.

Закрытие пулл реквеста

Запросы на пулл автоматически закрываются, когда запрошенные коммиты вливаются в репозиторий назначения. При этом генерируется событие, информирующее всех участников разработки, что пулл реквест был принят и влит в основную ветвь.
Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github
Так же возможно вручную закрыть пулл реквест в случае, если он был отклонён. Иногда это необходимо в случаях, когда изменения были приняты с помощью git-cherry-pick или другого механизма, который не позволяет обнаружить факт слияния (merge).

Внесение собственного вклада в проекты

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

Создание ответвлений (fork)

Если вы хотите вносить свой вклад в уже существующие проекты, в которых у нас нет прав на внесения изменений путём отправки (push) изменений, вы можете создать своё собственное ответвление (fork) проекта. Это означает, что GitHub создаст вашу собственную копию проекта, данная копия будет находиться в вашем пространстве имён и вы сможете легко делать изменения путём отправки (push) изменений.

Исторически так сложилось, что англоязычный термин «fork» (создание ветвления проекта) имел негативный контекстный смысл, данный термин означал, что кто-то повёл или ведёт проект с открытым исходным кодом в другом, отличном от оригинала, направлении, иногда данный термин так же означал создание конкурирующего проекта с раздельными авторами. В контексте GitHub, «fork» (создание ветвления проекта) просто означает создание ветвления проекта в собственном пространстве имён, что позволяет вносить публичные изменения и делать свой собственный вклад в более открытом виде.

Таким образом, проекты не обеспокоены тем, чтобы пользователи, которые хотели бы выступать в роли соавторов, имели право на внесение изменений путём их отправки (push). Люди просто могут создавать свои собственные ветвления (fork), вносить туда изменения, а затем отправлять свои внесённые изменения в оригинальный репозиторий проекта путём создания запроса на принятие изменений (Pull Request), сами же запросы на принятие изменений (Pull Request) будут описаны далее. Запрос на принятие изменений (Pull Request) откроет новую ветвь с обсуждением отправляемого кода, и автор оригинального проекта, а так же другие его участники, могут принимать участие в обсуждении предлагаемых изменений до тех пор, пока автор проекта не будет ими доволен, после чего автор проекта может добавить предлагаемые изменения в проект.

Для того, чтобы создать ответвление проекта, зайдите на страницу проекта и нажмите кнопку «Создать ответвление» («Fork»), которая расположена в правом верхнем углу.

Через несколько секунд вы будете перенаправлены на собственную новую проектную страницу, содержащую вашу копию, в которой у вас есть права на запись.

Рабочий процесс с использованием GitHub

GitHub разработан с прицелом на определённый рабочий процесс с использованием запросов на слияния. Этот рабочий процесс хорошо подходит всем: и маленьким, сплочённым вокруг одного репозитория, командам; и крупным распределённым компаниям, и группам незнакомцев, сотрудничающих над проектом с сотней копий. Рабочий процесс GitHub основан на тематических ветках, о которых мы говорили в главе Ветвление в Git.

Вот как это обычно работает:

Создайте форк проекта.

Создайте один или несколько коммитов с изменениями, улучшающих проект.

Отправьте эту ветку в ваш проект на GitHub.

Откройте запрос на слияние на GitHub.

Обсуждайте его, вносите изменения, если нужно.

Владелец проекта принимает решение о принятии изменений, либо об их отклонении.

Получите обновлённую ветку master и отправьте её в свой форк.

Очень напоминает подход, описанный в разделе Диспетчер интеграции главы 5, но вместо использования электронной почты, команда сотрудничает через веб-интерфейс.

Давайте посмотрим, как можно предложить изменения в проект, размещённый на GitHub.

В большинстве случаев можно использовать официальный инструмент GitHub CLI вместо веб-интерфейса GitHub. Инструмент доступен в системах Windows, MacOS и Linux. Посетите страницу GitHub CLI homepage для получения инструкций по установке и использованию.

Создание запроса на слияние

Тони ищет, чего бы запустить на своём новеньком Arduino. Кажется, он нашёл классный пример на https://github.com/schacon/blink.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Единственная проблема в том, что светодиод моргает слишком быстро; нам кажется, лучше установить задержку в три секунды, не одну. Так давайте исправим это и предложим изменения автору.

Клонируем нашу копию

Создаём тематическую ветку

Вносим свои изменения

Фиксируем изменения в тематической ветку

Отправляем новую ветку в нашу копию на GitHub

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

Также можно зайти на страницу «Branches», по адресу https://github.com/ /

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Если нажать на эту кнопку, появится экран ввода заголовка и описания предлагаемых изменений на рассмотрение владельцу проекта. Рекомендуется серьёзно подойти к составлению описания и сделать его максимально информативным, чтобы владелец проекта понимал, зачем эти изменения и какую пользу они принесут.

Также мы видим список коммитов в нашей тематической ветке, «опередивших» ветку master (в данном случае всего один коммит) и предпросмотр всех изменений, вносимых этими коммитами.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

После создания запроса на слияние (путём нажатия кнопки «Create pull request» на этой странице) владелец форкнутого проекта получит уведомление о предложенных изменениях со ссылкой на страницу с информацией о запросе.

Запросы на слияние широко используются для публичных проектов типа описанного выше, когда участник уже подготовил все изменения для слияния с основным репозиторием. Тем не менее, часто можно встретить использование запросов на слияние во внутренних проектах в самом начале цикла разработки. Объяснение простое: вы можете обновлять тематическую ветку после открытия запроса на слияние, поэтому сам запрос открывается как можно раньше чтобы отслеживать прогресс разработки.

Обработка запроса на слияние

На этом этапе, владелец проекта может просмотреть предложенные изменения, принять, отклонить или прокомментировать их. Предположим, ему импонирует идея, но он предпочёл бы большую задержку перед включением или выключением света.

В то время как в главе Распределенный Git обсуждение изменений может производится через электронную почту, на GitHub всё происходит онлайн. Владелец проекта может просмотреть суммарные изменения, вносимые запросом, и прокомментировать любую отдельно взятую строку.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Как только владелец прокомментирует изменения, автор запроса на слияние (а также все подписавшиеся на этот репозиторий) получат уведомления. Далее мы рассмотрим как настроить уведомления, но сейчас, если Тони включил уведомления через электронную почту, он получит следующее письмо:

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Кто угодно может оставлять комментарии к запросу на слияние. На Страница обсуждения запроса на слияние можно увидеть пример, где владелец проекта оставил комментарии как к строке кода, так и в основной секции обсуждения. Как вы могли заметить, комментарии к коду так же приведены в виде обсуждения.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Теперь участник может видеть что ему необходимо сделать для того, чтобы его изменения были приняты. К счастью, это тоже легко сделать. Используя почту, вам потребуется заново отправить свои изменения в список рассылки, а при использовании GitHub вы просто делаете коммит в тематическую ветку и повторяете push, что автоматически обновляет запрос на слияние. На рисунке Финальная стадия запроса на слияние также видно, что в обновленном запросе на слияние старый комментарий к коду был свёрнут, так как он относится к строке, которая с тех пор изменилась.

Когда участник сделает это, владелец проекта снова получит уведомление, а на странице запроса будет отмечено, что проблема решена. Фактически, как только строка кода имеющая комментарий будет изменена, GitHub заметит это и удалит устаревшее отличие.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Примечательно, что если вы перейдёте на вкладку «Files Changed» в этом запросе на слияние, то увидите «унифицированную» разницу — это суммарные изменения, которые будут включены в основную ветку при слиянии тематической ветки. В терминологии git diff это эквивалентно команде git diff master…​
для ветки, на которой основан этот запрос на слияние. В Определение применяемых изменений детальнее описан данный тип отличий.

GitHub так же проверяет может ли запрос на слияние быть применён без конфликтов и предоставляет кнопку для осуществления слияния на сервере. Эта кнопка отображается только если у вас есть права на запись в репозиторий и возможно простейшее слияние. По нажатию на неё GitHub произведёт «non-fast-forward» слияние, что значит даже если слияние может быть осуществлено перемоткой вперед, всё равно будет создан коммит слияния.

При желании, можно стянуть ветку и произвести слияние локально. Если эта ветка будет слита в master ветку и отправлена на сервер, то GitHub автоматически закроет запрос на слияние.

Это основной рабочий процесс, который используется большинством проектов на GitHub. Создаются тематические ветки, открываются запросы на слияние, производится обсуждение, при необходимости производятся доработки в ветке и, наконец, запрос либо закрывается, либо сливается.

Важно отметить, что можно открывать запросы на слияние между двумя ветками в одном репозитории. Если вы работаете над функционалом с кем-то ещё и у вас обоих есть права записи, то вы можете отправить свою тематическую ветку в репозиторий и открыть запрос на слияние в master ветку в рамках одного проекта, что позволит инициировать процедуру проверки кода и его обсуждения. Создание ответвлений проекта не является обязательным.

Продвинутые запросы на слияние

На текущий момент мы рассмотрели основы участия в проекте на GitHub, давайте рассмотрим некоторые интересные секреты и уловки касательно запросов слияния, чтобы вы могли более эффективно их использовать.

Запросы слияния как Патчи

Важно понимать, что многие проекты не воспринимают запросы слияния как очередь идеальных патчей, которые должны применяться аккуратно и по порядку, как и большинство проектов, участие в которых основывается на отправке набора патчей через списки почтовых рассылок. Большинство проектов на GitHub понимают ветки запросов на слияние как беседу относительно предлагаемого изменения, завершающуюся слиянием унифицированных изменений.

Это важное различие, так как изменение предлагается до того, как код станет считаться идеальным, что гораздо реже происходит с распространяемыми наборами патчей через списки рассылок. Обсуждение происходит на более раннем этапе и выработка правильного решения происходит за счёт усилий сообщества. Когда код предлагается через запрос на слияние и сопровождающий проекта или сообщество предлагает изменения, то не применяется набор патчей, а отправляются результирующие изменения как новый коммит в ветку, двигая обсуждение вперёд и сохраняя уже проделанную работу нетронутой.

Например, если вы вернётесь и посмотрите на Финальная стадия запроса на слияние, то увидите, что участник не делал перебазирование своего коммита и не отправлял новый запрос на слияние. Вместо этого были сделаны новые коммиты и отправлены в существующую ветку. Таким образом, если вы в будущем вернётесь к этому запросу слияния, то легко найдёте весь контекст принятого решения. По нажатию кнопки «Merge» целенаправленно создаётся коммит слияния, который указывает на запрос слияния, оставляя возможность возврата к цепочке обсуждения.

Следование за исходным репозиторием

Если ваш запрос на слияние устарел или не может быть слит без конфликтов, то вам нужно изменить его, чтобы сопровождающий мог просто его слить. GitHub проверит это за вас и под каждым из запросов на слияние отобразит уведомление, можно ли его слить без конфликтов или нет.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Если вы видите что-то вроде Запрос имеет конфликты слияния, то вам следует изменить свою ветку так, чтобы исключить конфликты и сопровождающий не делал лишнюю работу.

Существует два основных варианта это сделать. Вы можете либо перебазировать свою ветку относительно целевой ветки (обычно, относительно master ветки исходного репозитория), либо слить целевую ветку в свою.

Большинство разработчиков на GitHub выбирают последний вариант по тем же причинам, что и мы в предыдущем разделе. Важна история и окончательное слияние, а перебазирование не принесёт вам ничего, кроме немного более чистой истории, при этом оно гораздо сложнее и может стать источником ошибок.

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

Предположим, что в примере «tonychacon», который мы использовали ранее, основной автор сделал изменения, которые конфликтуют с запросом на слияние. Рассмотрим это пошагово.

Получаем последние изменения из него.

Сливаем основную ветку в нашу тематическую.

Исправляем указанный конфликт.

Отправляем изменения в ту же тематическую ветку.

Как только это будет сделано, запрос на слияние будет автоматически обновлён и перепроверен на возможность слияния.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Если вы очень хотите перебазировать ветку, чтобы её почистить, то, конечно, вы можете это сделать, но настоятельно не рекомендуется переписывать ветку, к которой уже открыт запрос на слияние. Если другие люди уже стянули её и проделали много работы, то вы столкнётесь со всеми проблемами, описанными в разделе Опасности перемещения главы 3. Вместо этого, отправьте перебазированную ветку в новую на GiHub и откройте новый запрос на слияние, который указывает на предыдущий, затем закройте исходный.

Ссылки

Возможно, ваш следующий вопрос будет: «Как мне сослаться на предыдущий запрос слияния?» Оказывается, существует много способов ссылаться на другие вещи практически везде, где у вас есть права записи на GitHub.

Давайте начнём с перекрёстных ссылок для запросов слияния или проблем. Всем запросам слияния и проблемам присваиваются уникальные номера в пределах проекта. Например, у вас не может быть запроса на слияние с номером #3 и проблемы с номером #3. Если вы хотите сослаться на любой запрос слияния или проблему из другого места, просто добавьте # в комментарий или описание. Так же можно указывать более конкретно, если проблема или запрос слияния находятся где-то ещё; пишите username# если ссылаетесь на проблему или запрос слияния, находящиеся в ответвлённом репозитории, или username/repo# если ссылаетесь на другой репозиторий.

Рассмотрим это на примере. Предположим, что мы перебазировали ветку в предыдущем примере, создали новый запрос слияния для неё и сейчас хотим сослаться на предыдущий запрос слияния из нового. Так же мы хотим сослаться на проблему, находящуюся в ответвлённом репозитории, и на проблему из совершенно другого проекта. Мы можем составить описание как указано на Перекрёстные ссылки в запросе слияния.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Когда мы отправим запрос на слияние, то увидим что-то вроде Отображение перекрёстных ссылок в запросе слияния.

Создание pull-запроса на GitHub

Распределённая система контроля версий Git обеспечивает простоту поддержки и разработки открытого программного обеспечения, в создании которого участвует команда специалистов. Сама система Git является ярким примером проекта с открытым исходным кодом. Множество проектов хранят файлы в репозиториях Git, а такие сайты как GitHub позволяют быстро внести свой вклад в развитие того или иного проекта.

Проекты с открытым исходным кодом, размещённые в публичных репозиториях, развиваются за счет вклада широкого сообщества разработчиков с помощью. Проект принимает внесённые в код изменения с помощью pull-запросов.

Данное руководство научит вас делать pull-запросы в репозитории Git с помощью командной строки.

Требования

Создание копии репозитория

Репозиторий – это главная папка проекта. Репозиторий содержит все файлы проекта, включая документацию и хронологию изменений для каждого файла. Репозитории на GitHub могут иметь несколько соавторов, также они могут быть публичными и приватными.

Чтобы начать работу над открытым проектом, нужно сначала создать собственную копию репозитория. Чтобы получить локальную рабочую копию кода, создайте форк проекта (ветвление, fork) и клонируйте его.

Форк проекта

Чтобы создать форк репозитория GitHub, откройте сайт GitHub и найдите открытый проект, в разработке которого вы хотите участвовать. Ссылки GitHub содержат имя владельца проекта и название самого проекта.

К примеру, репозиторий проекта node-chakracore принадлежит nodejs, значит, ссылка GitHub будет выглядеть так:

где nodejs – имя пользователя, node-chakracore – имя репозитория.

Выберите проект, в котором вы хотите принять участие, и откройте его репозиторий на GitHub.

На главной странице проекта вы увидите кнопку Fork под вашим значком пользователя.

Чтобы начать форк репозитория, нажмите кнопку Fork. В окне браузера появится следующее сообщение:

Forking nodejs/node-chakracore
It should only take a few seconds.

Когда процесс будет выполнен, в браузере вы увидите такой же репозиторий, как и раньше, но в ссылке уже будет указано ваше имя.

Теперь можно клонировать репозиторий и получить локальную копию кода.

Клонирование репозитория

Чтобы создать локальную копию кода проекта, откройте терминальное окно. Используйте команду git clone и укажите ссылку на форк репозитория.

Скопировать эту ссылку можно с помощью зелёной кнопки Clone or download на странице репозитория. Справа от ссылки появится кнопка, с помощью которой можно скопировать ссылку.

Теперь можно добавить скопированный URL в команду git clone:

git clone https://github.com/your-username/repository.git

Создание новой ветки

Работая над открытым проектом, разработчики предлагают внедрить в основной код различные новые функции и исправления. Некоторые идеи можно реализовать в короткие сроки, в то же время на реализацию других идей может уйти много времени и ресурсов. Поэтому разработчики создают ветку репозитория: это позволяет управлять рабочим процессом, изолировать изменения друг от друга и выбирать функции, которые нужно добавить в основную ветку репозитория проекта.

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

Создавая новую ветку из ветки master, важно выбрать описательное имя: например, вместо my-branch лучше использовать frontend-hook-migration или fix-documentation-typos.

Чтобы создать ветку, откройте окно терминала и перейдите в репозиторий:

Примечание: Замените repository названием своего репозитория.

Затем используйте команду git branch:

git branch new-branch

Примечание: Вместо new-branch укажите описательное имя ветки.

Чтобы перейти на новую ветку, используйте команду:

git checkout new-branch
Switched to branch ‘new-branch’

Чтобы вернуться на ветку master, используйте команду checkout и укажите имя ветки:

git checkout master

С помощью этой команды можно переключаться между различными ветками.

Теперь можно приступать к созданию новых и редактированию существующих файлов.

Локальные изменения кода

Внеся изменения в код, вы можете добавить их в локальный реопзиторий с помощью команды git add. Чтобы добавить все изменения в репозиторий, используйте флаг –A.

Чтобы записать изменения, добавленные в репозиторий, используйте команду git commit.

Создание сообщения коммита – очень важный этап работы над открытым проектом. Это сообщение позволяет другим разработчикам понять, что именно вы изменили в коде и почему это изменение важно. Кроме того, сообщения коммитов предоставляют хронологическую запись изменений проекта в целом, помогая новым разработчикам понять, как развивался проект.

Короткое сообщение коммита можно отправить с помощью флага –m, например:

Но если вы внесли существенные изменения в код проекта, вы должны написать более подробное сообщение. Для этого введите:

Команда откроет текстовый редактор. Если вы хотите выбрать текстовый редактор для создания коммита, добавьте название редактора в команду:

После запуска команды git commit на экране появится документ в текстовом редакторе, который выглядит примерно так:

# Please enter the commit message for your changes. Lines starting
# with ‘#’ will be ignored, and an empty message aborts the commit.
# On branch new-branch
# Your branch is up-to-date with ‘origin/new-branch’.
#
# Changes to be committed:
# modified: new-feature.py
#

Под комментариями вы можете добавить сообщение коммита.

Чтобы сообщение коммита было полезным для других разработчиков, поместите в начале сообщения краткое описание изменений длиной около 50 символов. Далее добавьте несколько разделов:

Постарайтесь предоставить в сообщении максимум полезной информации.

Сохраните и закройте текстовый файл с коммитом. После этого можно проверить его состояние:

Команда должна вернуть примерно такой вывод:

On branch new-branch
Your branch is ahead of ‘origin/new-branch’ by 1 commit.
(use «git push» to publish your local commits)
nothing to commit, working directory clean

Теперь можно использовать команду git push, чтобы выгрузить изменения в текущую ветку форка репозитория:

Теперь можно открыть форк репозитория на странице GitHub, переключиться на ветку, в которую вы внесли изменения, и просмотреть её.

На данном этапе вы уже можете сделать pull-запрос к оригинальному репозиторию. Но сначала рекомендуется обновить локальный репозиторий.

Обновление локального репозитория

Работая над открытым проектом вместе с другими разработчиками, важно постоянно следить за обновлениями и своевременно обновлять свой локальный репозиторий. В противном случае при создании pull-запроса может возникнуть конфликт.

Настройте удалённый репозиторий и синхронизируйте его с оригинальным репозиторием.

Настройка удалённого репозитория

Удалённый репозиторий – это размещённая в интернете версия проекта, к которой у вас есть доступ. Каждый удаленный репозиторий должен предоставлять вам право на чтение (или чтение и запись).

Чтобы синхронизировать изменения, внесенные в форк, с оригинальным репозиторием, вам нужно настроить удалённый репозиторий, который будет ссылаться на оригинальный репозиторий.

Сначала проверьте, какие удалённые серверы у вас настроены. Команда git remote с флагом –v отобразит URL-адреса, которые Git хранит вместе с соответствующими краткими именами удалённых серверов. Сейчас у вас есть только один репозиторий, origin.

Поскольку вы клонировали репозиторий, вывод будет примерно таким:

origin https://github.com/your-username/forked-repository.git (fetch)
origin https://github.com/your-username/forked-repository.git (push)

Если же ранее вы создали более одного удалённого репозитория, команда git remote –v выведет на экран полный список этих репозиториев.

Теперь нужно создать репозиторий upstream, который указывает на оригинальный репозиторий.

git remote add upstream https://github.com/original-owner-username/original-repository.git

В данном примере upstream – это короткое имя удаленного хранилища, так как с точки зрения Git «upstream» ссылается на репозиторий, из которого вы клонировали свой репозиторий. Чтобы добавить удалённый репозторий со ссылкой на репозиторий соавтора, можно указать имя соавтора или его ник.

Чтобы убедиться, что удалённый репозиторий upstream был успешно добавлен, в каталоге репозитория запустите команду:

Теперь вы можете синхронизировать форк с исходным репозиторием.

Синхронизация форка

В терминале перейдите в каталог локального репозитория и используйте команду git fetch, чтобы извлечь все ветки и их коммиты из оригинального репозитория.

git fetch upstream

Вывод команды зависит от того, сколько изменений появилось в исходном репозитории. В конце вывода содержатся примерно такие строки (они варьируются в зависимости от того, сколько веток входит в проект):

Теперь коммиты ветки master будут храниться в локальной ветке upstream/master.

Перейдите на локальную ветку master:

git checkout master
Switched to branch ‘master’

Теперь можно объединить все изменения, которые были сделаны в ветке master исходного репозитория, с локальной веткой.

git merge upstream/master

Вывод начинается с Updating, если в ветке появились новые данные. Если никаких изменений не произошло, команда вернёт Already up-to-date.

Ветка master вашего форка теперь синхронизирована с репозиторием upstream.

В зависимости от вашего рабочего процесса и количества времени, которое вы тратите на внесение изменений, вы можете синхронизировать ваш форк с кодом исходного репозитория столько раз, сколько вам нужно. Но вы обязательно должны синхронизировать форк, прежде чем сделать pull-запрос, чтобы ваш код не конфликтовал с остальным кодом проекта.

Создание pull-запроса

Теперь вы можете сделать pull-запрос к исходному репозиторию.

Перейдите в форк репозитория в браузере и нажмите кнопку New pull request слева.

На следующем экране вы можете отредактировать ветку и выбрать репозиторий в выпадающем меню.

После этого на экране появится форма, в которой вы можете добавить заголовок, оставить комментарий и т.п.

GitHub сообщит вам, если вы можете объединить две ветки. Добавьте заголовок, комментарий и нажмите Create pull request.

Пользователи, поддерживающие исходный репозиторий, рассмотрят ваш запрос. Возможно, они предложат вам внести в него некоторые изменения.

Заключение

Теперь вы умеете отправлять pull-запросы, работая над открытыми проектами.

Разработка проекта с открытым исходным кодом может стать полезным опытом.

Как сделать pull request на github

Как сделать pull request

Регистрация на GitHub

Если у вас нет аккаунта на Github – регистрируемся по ссылке http://github.com/join

Если есть – просто входим по ссылке http://github.com/login

Как сделать pull request прямо на GitHub

Шаг 1. Заходим в основной репозиторий задачи https://github.com/urfu-2015/verstka-tasks-1
И делаем форк задачи к себе. Для этого жмём «fork» в правом верхнем углу.

Форк (fork) можно расматривать, как личную копию основного репозитория.

Шаг 2. Заходим к себе https://github.com/gogoleff/verstka-tasks-1. Вместо gogoleff свой логин.

Шаг 3. Нажимаем на файл, который хотим изменить. Затем кнопку редактирования.

Шаг 4. Редактируем файл до готовности прямо здесь (или вставляем код из любимого редактора)

Шаг 5. Когда всё готов создадим коммит.
Для этого внизу в поле «summary» вводим поясняющий текст, и нажимаем «Commit changes».

Коммит (commit) – можно рассматривать, как утверждение кода, создание версии (как в wiki). К каждой версии можно вернуться. Каждый новый коммит – новая версия вашего кода.

Шаг 6. Создаём pull request. Для этого выбираем пункт меню справа «Pull requests».
И нажимаем кнопку «New pull request».

Шаг 7. Нажимаем кнопку «Create pull request»

Шаг 8. Вводим своё ФИО и нажимаем кнопку «Create pull request»

Готово!

Если нужны правки, просто повторяем шаги со 2 по 5.

Как сделать pull request в windows

Шаг 1. Заходим в основной репозиторий задачи https://github.com/urfu-2015/verstka-tasks-1
И делаем форк задачи к себе. Для этого жмём «fork» в правом верхнем углу.

Форк (fork) можно расматривать, как личную копию основного репозитория.

Шаг 2. Затем скачивание приложение по ссылке https://desktop.github.com/

Шаг 3. Устанавливаем. После установки приложение попросит настроить его. Вводим логин и пароль.

Шаг 4. Затем полное имя и электронную почту (обычно уже верно заполнены).

Шаг 5. После настройки вы попадёте в приложение. Теперь клонируем репозиторий с задачей.
Для этого нажимаем «+» в левом верхнем углу, выбираем свой логин слева, и репозиторий verstka-tasks-1 справа.

Клон (clone) можно расматривать, как локальную копию личного репозитория.

Шаг 6. Выбираем рабочую директорию (обычно уже подходящая).

Шаг 7. Теперь заходим в директорию (там должны быть файлы index.html и README.md).

Шаг 9. Решаем задачу, редактируем файлы в любимом редакторе до полной готовности. В приложении видим изменения.

Шаг 10. Когда всё готов создадим коммит.
Для этого внизу в поле «summary» вводим поясняющий текст, и нажимаем «Commit to master».

Коммит (commit) – можно рассматривать, как утверждение кода, создание версии (как в wiki). К каждой версии можно вернуться. Каждый новый коммит – новая версия вашего кода.

В результате видим сообщение:

Шаг 11. Таким образом мы утвердили наши изменения в локальном (склонированном) репозитории. Теперь необходимо отправить ветку с изменениями в удалённый личный (форк) на github.com и сделать pull request. В качестве название пулл-реквеста вводим своё ФИО и нажимаем «Send Pull Request».

В результате видим сообщение:

Готово!

Если нужны правки, повторяем шаги 9 и 10. Затем нажимаем «Sync» в правом верхнем углу. Приложение отправит коммит в удалённый личный репозиторий (форк), что автоматически обновит pull request.

Как сделать pull request в windows, используя Git Shell

Здесь два варианта:

После установки, запускаем Git Bash
(ярлык для запуска можно найти в меню Пуск).

Устанавливаем вместе с приложением Git Shell.
Для этого выполняем шаги со 2 по 4 раздела Как сделать pull request в windows

После установки приложения, запускаем Git Shell
(ярлык для запуска можно найти на рабочем столе).

Далее смотрим shell команды в разделе как сделать pull request в linux.

Как сделать pull request в linux

Заходим в основной репозиторий задачи https://github.com/urfu-2015/verstka-tasks-1
И делаем форк задачи к себе. Для этого жмём «fork» в правом верхнем углу.

В linux уже установлен git и обычно настроен.

Шаг 1. Выполняем следующие команды в терминале:

Шаг 2. Заходим в к себе в репозиторий.

Шаг 3. Создаём pull request. Для этого выбираем пункт меню справа «Pull requests».
И нажимаем кнопку «New pull request».

Шаг 4. Нажимаем кнопку «Create pull request»

Шаг 5. Вводим своё ФИО и нажимаем кнопку «Create pull request»

Готово!

Если нужны правки. Вносим их в любимом редакторе, и снова делаем коммит.

Отправить Pull Request в чужой репозиторий на github

Pull Request (PR) — это запрос на включение сделанных вами изменений. Официальная GitHub дока по Pull Requests.

Как известно, мы можем свободно скачивать/клонировать любые публичные репозитории любого автора на github. После того, как я склонирую себе какой-либо репозиторий, я могу вносить в него любые изменения. Изменять файлы прямо в master`е в моей копии репозитория или оформлять изменения через Pull Requests, при этом я сам же эти изменения и приму в свою копию репозитория.

Но, как сделать, чтобы автор оригинального репозитория смог увидеть мои изменения и принять их (т.е. вмерджить их) в свой (оригинальный) репозиторий? По порядку:

Создание PR в «чужой» репозиторий github

1. Нужно форкнуть репозиторий на github (кнопка fork) в свой профиль.

2. Клонируем репозиторий к себе на компьютер из своего профиля:

3. Привязываем оригинальный репозиторий к своему.

Только что склонированный репозиторий имеет только одну привязку к удалённому репозиторию. Она называется origin и указывает на вашу копию на GitHub (ваш профиль), а не на оригинальный репозиторий. Чтобы иметь привязку и к оригинальному репозитоирию, нужно добавить ещё одни привязку, назовём её upstream:

Теперь мы можем полноценно работать с репозиторием, как вливать, так и забирать всё что в репе есть.

4. Вносим правки в код. Можно вносить изменения в файлы и коммитить их. Можно прямо в master, но, лучше для каждой фичи создавать отдельную ветвь:

5. Создаём ПР. Заходим на github на страницу оригинального репозитория. Создам Pull Request на основе созданной нами ветви. Обычно github уже видит созданную ветвь, которая не смерджена с мастером, и сам предлагает создать PR к ней.

После создания ПР ваши изменения будут видны всем пользователям. После проверки ПР, изменения могут быть вмерджены авторами (точнее сказать не авторами, а теми, кто имеет право на запись — push). Или же могут быть запрошены корректировки кода, которые потребуют дополнительных комментариев или даже новых коммитов от вас.

Как стать контрибутором на github?

После того, как ваши изменения пройдут проверку и будут вмерджены в основную ветвь репозитория, вы сможете себя найти в списке сontributors репозитория. Контрибуторы — это те пользователи, которые внесли свой вклад (хотя бы одну строчку) в развитие проекта.

Что делать, если разработка заняло долгое время и оригинальный репозиторий успел уйти вперёд?

Как обновиться с оригинального репозитория?

Нужно скачать последние изменения с оригинального (upstream) репозитория и вмерджить их в свой:

Как сделать pull request

Pull Request — запрос на включение. На включение написанного вами кода в чужой репозиторий.

С чего начать?

А для начала этот самый репозиторий нужно форкнуть (fork — вилка, ответвление). Разберём это нехитрое действо на примере веб-сервиса для хостинга IT-проектов, название которому GitHub. Разумеется, кроме GitHub есть и другие: BitBucket, например. Выбирать по вкусу.

Для успешного проведения нижеизложенных операций у вас (что естественно) должен быть установлен git

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

В консоли в зависимости от входных данных набираем нечто подобное:

Отлично. Уже можно вносить свои изменения в код проекта.

Тот репозиторий, что теперь лежит на вашем жёстком диске, независим от основного. В нём отслеживаются только ваши наработки. Но как следить за изменениями, происходящими в первоисточнике, откуда вы « стянули » репозиторий? Добавить удаленный репозиторий в отслеживаемые. Например, так:

Давайте посмотрим как сливать изменения из оригинального репозитория к себе в случае, если разработка в нём ушла вперёд пока вы сосредоточенно писали коммиты:

Если репозиторий огромен, а забирать его весь не хочется, клонируем только нужную ветку:

Что такое ветки?

Чаще всего ветки (branch — ответвление, ветвь, филиал) бывают тематическими. Например, при общей разработке, когда у всех участников есть право записи в репозиторий. В этом случае ветки используются для отделения изменений, сделанных одним из разработчиков, от общего репозитория. Ветки могут пригодиться и в случае с созданием pull-request’а.

Создание ветки происходит довольно просто. Находясь в каталоге с проектом, наберите следующие команды:

Новые ветки создаются не только из master, берите любую!

Находясь в только что созданной ветке, вы можете приступить к работе. Вносите в код свои изменения, а когда закончите просто переключитесь обратно к своей основной ветке. Вы можете отправить pull request, выбрав ветку new_branch или же прежде слить изменения из неё в основную ветку разработки. Рассмотрим это подробнее:

Если нужно отправить в свой удалённый репозиторий вновь созданную ветку (не сливать её с master), делаем следующее:

Не торопитесь сливать изменения. Если что-то не заладилось, созданную ветку можно удалить:

Удалить все локальные ветки, которые были смержены (то есть код которых теперь есть) в ветках develop или master:

Отправляем изменения

Добрались таки до ответа на поставленный вопрос: что такое pull request, зачем оно нужно и как его достичь. Как предложить владельцу репозитория свои изменения?

Для этого зайдите в свой аккаунт, выбирайте репозиторий владельца и ищите небольшую зелёную кнопку (на момент написания поста она была таковой, если даже что-то изменится, думаю, найти её будет несложно).

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

А дальше. ждать. Пока придёт владелец оригинального репозитория и примет/отклонит ваши изменения.

Ну вот, мы его достигли. Просветления то есть 🙂

Как отменить изменения

Когда нужно вернуть более старое состояние уже проиндексированных файлов и забыть о них совсем (помните, что упомянутая здесь операция отменит всю вашу работу до определённого коммита!):

Cмотрим на какой коммит откатиться. В примере откатываемся назад на 1 коммит. Для изменения состояния в этой же ветке удалённого репозитория тоже придётся использовать грубую силу — флаг force :

Или посмотреть все изменения, которые происходили с отдельным файлом:

А подробнее?

Итогов подводить не стану. Для заинтересованных лиц ссылочка на неофициальную документацию: The Git Community Book

How to make your first pull request on GitHub

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

What is forking?

When we love someone’s repository and would like to have it in our GitHub account, we fork it so that we can work with it separately.

When we fork a repository, we get an instance of that entire repository with its whole history. After forking, we can do whatever we want to do without affecting the original version.

What is a pull request?

Pull requests are the way we contribute to group projects or open source projects.

For instance, a user Harry forks a repository of ThanoshanMV and makes changes to that repository. Now Harry can make a pull request to ThanoshanMV, but it’s up to ThanoshanMV to accept or decline it. It’s like saying, “ThanoshanMV, would you please pull my changes?”

What it means to contribute

Not only can we contribute to an open source project with code, but we can also contribute in many other ways. Some of these ways are described below.

As 99xtechnology IT firm’s hacktitude starting guide says, we can contribute to an open source project in the following ways:

Let’s make our first pull request!

If you’re not very familiar with Git & GitHub, please go review The beginner’s guide to Git & GitHub.

1. Fork the repository

Fork the repository by clicking the fork button on the top of the page. This will create an instance of that entire repository in your account.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

2. Clone the repository

Once the repository is in your account, clone it to your machine to work with it locally.

To clone, click on the clone button and copy the link.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Open the terminal and run the following command. It will clone the repository locally.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Now we have set up a copy of the master branch from the main online project repository.

We need to go to that cloned directory by running this command:

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

3. Create a branch

It’s good practice to create a new branch when working with repositories, whether it’s a small project or contributing to a group’s work.

Branch name should be short and it should reflect the work we’re doing.

Now create a branch using the git checkout command:

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

4. Make changes and commit them

Make essential changes to the project and save it.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Add those changes to the branch you just created using the git add command:

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Now commit those changes using the git commit command:

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

5. Push changes to GitHub

In order to push the changes to GitHub, we need to identify the remote’s name.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

For this repository the remote’s name is “origin”.

After identifying the remote’s name we can safely push those changes to GitHub.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

6. Create pull request

Go to your repository on GitHub and you’ll see a button “Compare & pull request” and click it.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Please provide necessary details on what you’ve done (You can reference issues using “#”). Now submit the pull request.

Congratulations! You’ve made your first pull request.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

If your pull request is accepted you’ll receive an email.

7. Sync your forked master branch

Before submitting any pull requests to the original repository you have to sync your repository to the original one.

Even if you are not going to submit a pull request to the original repository, it’s better to sync with the original repository as some additional features and bug fixes may have been done since you forked the original repository.

Follow these steps to update/sync those changes to your master branch:

It’ll list all branches and indicates the current or active branch in green.

2. Switch to the master branch.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

3. Add the original repository as an upstream repository.

In order to pull the changes from the original repository into your forked version, you need to add the original Git repository as an upstream repository.

Here, [HTTPS] is the URL that you have to copy from the owner’s repository.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

4. Fetch the repository.

Fetch all of the changes from the original repository. Commits to the original repository will be stored in a local branch called upstream/master.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Merge the changes from the upstream/master into your local master branch. This will bring your fork’s master branch into sync with the upstream repository without losing your local changes.

6. Push changes to GitHub

At this point your local branch is synced to the original repository’s master branch. If you want to update the GitHub repository, you need to push your changes.

NOTE: After syncing your forked master branch you can remove that remote if you want to. But you’ll need to update/sync your repository in future too, so it’s best practice to keep it.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

8. Delete the unnecessary branch

Branches are created for a special purpose. Once that purpose is accomplished, those branches aren’t necessary, so you can delete them.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

You can delete the version of it on GitHub, too.

Как сделать pull request на github. Смотреть фото Как сделать pull request на github. Смотреть картинку Как сделать pull request на github. Картинка про Как сделать pull request на github. Фото Как сделать pull request на github

Conclusion

GitHub is a powerful tool to control version history. Everyone can contribute to open source projects by making pull requests. Contributions aren’t always code – there are other ways to contribute, too.

Finally, I have to tell you that you shouldn’t worry if your pull requests are rejected. Maintainers spend a lot time improving their projects, and they know a lot more about their projects than we do. So don’t worry if your request isn’t merged.

Stay strong, stay positive, and never give up.
― Roy T. Bennett, The Light in the Heart

This article was originally posted on Medium.

You can contact and connect with me on Twitter.

Keep contributing to the open source world!

Источники информации:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *