Skip to content

Latest commit

 

History

History
164 lines (99 loc) · 12.9 KB

cm3xg4f8q000109l19vcb8ks5.md

File metadata and controls

164 lines (99 loc) · 12.9 KB
title seoTitle seoDescription datePublished cuid slug cover tags
Как работать с пул-реквестами в личном репозитории GitHub
Как работать с пул-реквестами в личном репозитории GitHub
Учимся работать с пул-реквестами на GitHub в личных репозиториях
Mon Nov 25 2024 19:53:41 GMT+0000 (Coordinated Universal Time)
cm3xg4f8q000109l19vcb8ks5
kak-rabotat-s-pul-rekvestami-v-lichnom-repozitorii-github
github, version-control, git, pull-requests, qt-creator, git-workflow, pul-rekvest

Введение

Обычно в инструкциях по пул-реквестам (pull request) GitHub рассматривают примеры на базе форков (fork). Мы же попрактикуем работу с пул-реквестом исключительно в пределах личного репозитория.

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

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

💡
Материал статьи предусматривает знание читателем основ системы контроля версий git

Подготовка репозитория

Перед тем как переходить к пул-реквестам, нам необходимо создать репозиторий с начальным исходным кодом. Пусть это будет проект на C++ и CMake. Я, например, создал самый обычный “Hello World” в среде разработки QtCreator.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1732461586872/f51bfbbc-6e46-4cd8-94e3-40aac6c1bab9.jpeg align="center")

Теперь загрузим проект на GitHub. Для этого создадим новый личный репозиторий на GitHub и закоммитим туда наш код.

Идем на GitHub и создаем репозиторий.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1732462204016/bf037fa8-2fdd-427a-8b07-9fc1d506a14e.png align="center")

На странице создания репозитория вводим его название (у меня это “pr_example”) и жмем “Create repository”.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1732462370246/e11e1f4c-de88-406e-8b35-6aa61d42b04a.png align="center")

Пустой репозиторий создан. Теперь, используя подсказки по командам git, загружаем свой проект на GitHub. Эти команды должны быть выполнены в терминале на вашем компьютере в папке проекта. Для удобства я использовал терминал прямо в среде QtCreator.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1732462676128/e012a0b0-3636-4ef1-9612-26f5133f4a56.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1732463113388/8b3857bc-540c-4fbe-9407-517be3fa78d6.png align="center")

Рассмотрим команды по порядку. Инициализируем локальный репозиторий в папке проекта:

git init

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

git add main.cpp
git add CMakeLists.txt

После добавления файлов делаем первый коммит с сообщением “first commit”:

git commit -m "first commit"

Коммит выполнен, но хранится он только в локальном репозитории. А нам нужно отправить его и на удаленный репозиторий GitHub. Для этого добавим адрес удаленного репозитория GitHub и выполним команду push:

git branch -M main # Переименование главной ветки в "main"
git remote add origin https://github.com/trots/pr_example.git # Здесь используйте ваш адрес репозитория
git push -u origin main

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1732463709348/28060b0e-7165-402c-99f7-e68f2ea4d62a.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1732463840243/b981f64b-9a13-43c9-8d6e-f2bd998966d7.png align="center")

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

Работа с пул-реквестами неразрывно связана с ветками git. Общая идея такая:

  • коммиты не должны выполняться напрямую в ветку main,

  • для работы создается отдельная ветка и коммиты выполняются только в нее.

Итак, переходим в терминал, создаем новую ветку с названием new_feature и переключаемся на нее:

git switch -c new_feature

С помощью команды git branch можно увидеть, что теперь у нас в проекте две ветки.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1732464578866/51e5d341-f281-4d62-89b4-2937ff6e60eb.png align="center")

Теперь внесем изменения в код main.cpp, добавив дополнительные восклицательные знаки к строке “Hello World!!!”. С помощью команды git status можем увидеть, что файл main.cpp перешел в статус измененных.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1732464907476/d79f88af-c64d-4ede-abd9-692f746be505.png align="center")

Закоммитим изменения, предварительно добавив файл в индекс коммита.

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

git add main.cpp # Добавление файла в индекс коммита
git commit -m "second commit"

Коммит в отдельной ветке готов. Отправляем нашу ветку new_feature в удаленный репозиторий на GitHub и можем переходить к пул-реквесту:

git push --set-upstream origin new_feature

Другие способы загрузки кода на GitHub рассмотрены в статье Как загрузить код проекта на GitHub

Работа с пул-реквестом на GitHub

Как только новая ветка загружен на GitHub, ресурс нам сразу же предлагает создать пул-реквест. Воспользуемся предложением.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1732465666003/e3d53920-8bff-4898-aa56-4a5539ab954b.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1732465935572/cff7708f-7adb-4719-bb3c-e73262b6b279.png align="center")

Пул-реквест создан и находится в состоянии Open. На этом этапе обычно выполняются контролирующие проверки вносимых правок: как автоматические, так и со стороны специалистов. В нашем же случае мы сразу переходим к слиянию пул-реквеста и нажимаем “Merge pull request”.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1732466249533/21022e9a-8856-4654-aa4e-2a626e7f7fe2.png align="center")

Готово, пул-реквест завершен, а наша ветка new_feature слита в ветку main. Теперь ветка new_feature может быть безопасно удалена. Она больше не нужна, ее жизненный цикл окончен.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1732466672828/8ab91970-f920-4c14-a127-c048197b8aed.png align="center")

Возвращаемся обратно в терминал и переключаемся на ветку main. Можно заметить, что на ветке main все еще старый код. Чтобы обновить ветку, нам нужно синхронизировать ее с веткой на GitHub командой pull:

git switch main
git pull

Теперь остается удалить ветку new_feature, которая осталась в локальном репозитории:

git branch -d new_featureя

На этом работа с пул-реквестом завершена.

Выводы

В статье мы попробовали внести изменения в основную ветку проекта main через механизм пул-реквестов. Это хорошее начало перед более вдумчивым и обширным освоением инструмента, так как пул-реквесты (или где-то их называют мердж-реквесты) повсеместно используются в разработке ПО.

Видео-версия текста статьи:

%[https://youtu.be/WJtAhmc6gA4]


Читайте больше в моем Телеграм канале: Так себе программист