Лабораторная работа 2. Совместная работа в Git
В первой лабораторной работе вы познакомились с основами Git: создали локальный и удалённый репозиторий, научились делать коммиты и отправлять изменения на GitHub. Однако в реальных проектах над кодом работает несколько человек одновременно. В этой работе вы изучите инструменты, которые делают такую работу возможной и эффективной: ветвление (branching), систему Issues для постановки задач, Pull Requests для проверки кода
Часть 1: Подготовка репозитория и создание Issues
Создайте новый репозиторий на GitHub с названием
lab2-project
. Поставьте галочку "Add a README file". Это будет ваша основная (main) ветка.Склонируйте репозиторий на свой компьютер:
bashgit clone https://github.com/ваш-username/lab2-project.git cd lab2-project
Создайте два Issue в вашем репозитории на GitHub:
Перейдите во вкладку
Issues
->New Issue
.Issue #1: "Добавить файл
calculator.py
с функцией сложения"В описании можно добавить: "Необходимо создать файл и реализовать функцию
add(a, b)
".
Issue #2: "Добавить файл
greeter.py
с функцией приветствия"В описании: "Создать функцию
greet(name)
, которая возвращает строку'Hello, {name}!'
".
Для каждого Issue система присвоит уникальный номер (например,
#1
).
Часть 2: Работа с ветками и Pull Requests
Рабочий процесс (workflow) часто выглядит так: для каждой новой задачи создается отдельная ветка от main
, в ней ведется разработка, а затем изменения предлагаются в main
через Pull Request.
Задание 1: Реализация функции сложения (Issue #1)
Создайте новую ветку для решения первого Issue. Принято давать веткам понятные имена, например,
feat/add-calculator
(feat - от feature).bashgit switch -c feat/add-calculator
Создайте файл
calculator.py
в локальной копии репозитория с следующим содержимым:pythondef add(a, b): return a + b
Добавьте файл в коммит и закоммитьте изменения. В сообщении коммита укажите номер Issue, чтобы GitHub автоматически связал их.
bashgit add calculator.py git commit -m "feat(calculator): add add function (#1)"
Отправьте ветку на GitHub:
bashgit push -u origin feat/add-calculator
Создайте Pull Request (PR):
На GitHub откроется кнопка
Compare & pull request
для вашей свежезапущенной ветки. Нажмите на нее.В заголовке укажите
Feat: Add calculator (#1)
.В описании подробно распишите, что было сделано.
Убедитесь, что в правой части окна PR назначен
reviewer
(если вы работаете один, можно пропустить) и связанissue
(можно написатьCloses #1
– тогда при мердже PR Issue закроется автоматически).Нажмите
Create pull request
.
Смерджите PR:
Так как это учебный проект и вы единственный разработчик, вы можете самостоятельно провести код-ревью и нажать кнопку
Merge pull request
->Confirm merge
.После слияния ветку можно удалить (кнопка
Delete branch
).
Обновите локальную ветку
main
:
Вернитесь в основную ветку и получите изменения с GitHub.bashgit switch main git pull origin main
Теперь у вас локально есть файл
calculator.py
.
Задание 2: Реализация функции приветствия и возникновение конфликта
Создайте ветку для второго Issue:
bashgit switch -c feat/add-greeter
Создайте файл
greeter.py
:pythondef greet(name): return f'Hello, {name}!'
Предположим, что пока вы работали, кто-то другой изменил
main
. Давайте сэмулируем это:Переключитесь обратно в
main
:git switch main
Создайте новый файл, например,
README.md
, и напишите в нем что-нибудь. Или измените существующийREADME.md
.Сделайте коммит и запушьте изменения:
bashgit add README.md git commit -m "docs: update readme" git push origin main
Вернитесь к своей feature-ветке и попробуйте сделать push:
bashgit switch feat/add-greeter git push -u origin feat/add-greeter
Пуш успешен, так как вы работаете в своей ветке.
Создайте Pull Request для ветки
feat/add-greeter
.GitHub заметит, что ваша ветка отстает от
main
и может быть показано сообщение о том, что ветки невозможно автоматически смерджить из-за конфликта.GitHub предложит вам разрешить этот конфликт прямо на сайте. Нажмите
Resolve conflicts
.
Разрешение конфликта:
GitHub откроет редактор конфликтов. Конфликт возникает, если одни и те же строки в одних и тех же файлах были изменены в обеих ветках. В нашем сценарии конфликта может и не быть, так как вы меняли разные файлы.
Если бы конфликт был, вы бы увидели разметку:
text<<<<<<< feat/add-greeter Ваши изменения в ветке feat/add-greeter ======= Изменения в ветке main >>>>>>> main
Вам нужно вручную отредактировать файл, оставив нужный код, и убрав маркеры
<<<<<<<
,=======
,>>>>>>>
.После редактирования нажмите
Mark as resolved
и затемCommit merge
.
Завершите создание/обновление PR и смерджите его.