Перейти к содержанию

GitHub Flow и ветки

Привет! На прошлой неделе мы узнали, что такое Гит и отправили свой первый код в удаленный репозиторий. Теперь поговорим о best practices при работе с Гитом и научимся проходить код-ревью.

Как оформлять коммиты

Очень важно правильно оформлять коммиты, чтобы другим разработчикам (и тебе в будущем) было понятно, зачем сделаны изменения. Основные правила хорошо описал Василий Половнёв в своём блоге:

https://vasily.polovnyov.ru/posts/git-commit-messages.html

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

https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716

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

Файл REAMDE.md

Внутри любого репозитория обязательно должен быть файл REAMDE.md, в нем хранится информация о том, что тут хранится и как это запускать. Файл README.md содержит всю необходимую информацию о проекте (твоем коде), желательно на английском языке. Его удобно редактировать прямо в веб-интерфейсе GitHub'а, можно смотреть результат.

Нажми «карандашик»:

Затем оформи всё по красоте:

Затем нажми «Preview changes», чтобы посмотреть, что получилсь:

Файл не зря имеет расширение md, это означает MarkDown — специальный язык разметки, с помощью которого удобно форматировать и оформлять текст. Для быстрого ознакомления глянь ссылку: https://paulradzkov.com/2014/markdown_cheatsheet/

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

https://github.com/othneildrew/Best-README-Template

https://github.com/dbader/readme-template

Правильно оформленный ридми содержит краткое описание проекта (желательно со скриншотом), инструкцию по установке и запуску с примерами команд.

Пример хорошо оформленного REAMDE: https://github.com/LonamiWebs/Telethon

GitHub Workflow

👆— так называется способ работы с репозиторием, которого обычного придерживаются (или как-то модифицируют под себя) большинство разработчиков. В его основе лежит такой механизм работы с гитом, как ветвление. Ветки (branch) чаще всего создаются во время работы в команде, чтобы не мешать друг другу и работать каждый в своей ветке. А потом, после проверки работоспособности, сливать код в основную ветку.

Принцип здесь такой: основная ветка (master) всегда содержит стабильный, работающий код. Чтобы его не поломать, другие разработчики копируют этот код в безопасную область, которая называется "ветка", добавляют туда какой-то новый код, тщательно проверяют, и, если всё окей, добавляют стабильный код в master. Таким образом, много разработчиков могут работать параллельно над одним и тем же проектом, не мешать друг другу и ничего не поломать. Такой подход называется GitHub Flow, приглашаю к прочтению его официальное описание:

https://guides.github.com/introduction/flow/

А вот и перевод на русский:

https://habr.com/ru/post/346066/

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

Как сдавать на проверку (Pull Request)

Создай приватный репозиторий на GitHub. Ты помнишь, что название репозиториев на GitHub'е принято оформлять в kebab-case 🍡. Пример: my-awesome-name

При создании репозитория нажми галочку "Add .gitignore" и выбери Python, это нужно для того, чтобы репозиторий не хранил ненужные временные файлы.

Пригласи проверяющего (меня) как коллаборатора в свой репозиторий: открой вкладку Settings, пройди в Collaborators, введи логин проверяющего и нажми Add collaborator. Как только проверяющий примет приглашение, он появится в списке коллабораторов и сможет проводить код-ревью.

Склонируй созданный репозиторий себе командой git clone адрес-репозитория и перейди в него командой cd имя-репозитория.

Создай новую ветку от мастера командой git checkout -b feat/new-feature , feat — это сокращение от feature (англ. "особенность", "функциональность"), так принято называть ветку, которая добавляет в проект какую-то новую функциональность. new-feature это название той функциональности, которую ты добавляешь в рамках домашней работы. Замени это слово на подходящее по смыслу.

Убедись, что находишься на новой ветке командой git status. Теперь ты делаешь задание. Когда всё будет готово, воспользуйся командой git diff. Она показывает, какие изменения будут зафиксированы. Внеси необходимые изменения, закоммить их, и запушь (то есть отправь на Гитхаб командой git push).

После того, как домашнее задание сделано и запушено в новую ветку, необходимо пройти код-ревью. Для этого зайди в браузере на Гитхаб и открой пулл-реквест: нажми кнопку New pull request и проверь направление стрелочки: она должна указывать из твоей ветки feat/имя-фичи на master:

Pull request (ПР) — это запрос на добавление новой функциональности к основной версии кода. После того, как он будет одобрен, весь код с новой ветки добавится в master, смерджится (англ. merge "сливать", "поглощать").

После открытия Pull request'а поставь своего проверяющего ревьюером. Нажми Reviewers справа и выбери никнейм. Если он появился и рядом загорелась желтая точка — всё сделано правильно. Остается только дождаться проверки. Ты получишь уведомление на почту, когда проверка будет сделана.

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

Можно идти отдыхать. Ура!

Иногда не получается смерджить изменения из дополнительной ветки в master. Например, когда вы с кем-то другим работали над одним куском кода и изменили его. Гит в таком случае не знает, какое изменение оставить, их же два. Это называется конфликтом слияния (merge conflict). В этом случае надо помочь Гиту и выбрать нужные версии кода, нужно открыть файл с конфликтом, найти этот конфликт (будет между ёлочками), в данном случае это 12345 и 54321, надо оставить что-то одно:

какой-то код
ещё какой-то код

<<<<<<< HEAD
12345 
=======
54321
>>>>>>> feature

ещё какой-то код

Оставляем 12345 и удаляем все ненужные символы:

какой-то код
ещё какой-то код

12345 

ещё какой-то код

Делаем коммит, готово. Конфликта больше нет.

Дополнительные штуки

Туториал по маркдауну: https://commonmark.org/help/tutorial

Третья глава книги https://git-scm.com/book/ru/v2 (Ветвление в Git)

Практика

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